2017-01-25 4 views
0

У меня есть класс медицинской формы. Эта форма будет дана как мужчинам, так и женщинам. Я бы хотел, чтобы НЕ нужно было различать мужчин и женщин, когда я создавал экземпляр класса. Было бы неплохо, если бы я мог создать такой же способ, независимо от пола, и задавать одни и те же вопросы независимо от пола. Но программа, которая осознает, что глупо спрашивать, беременна ли человек, тогда она либо не спросит этот вопрос, либо еще не напечатает, сказав, что это нерелевантный вопрос и пропустить его. Это базовый код, который у меня есть.Python 3.4 Inheritance

if male: 
    form = medForm("Bill") 
    form.MedHistory.isSmoking() 


if female: 
    form = medForm("Sarah") 
    form.MedHistory.isSmoking() 
    form.MedHistory.isPregnent() 


class maleSection(): 
    def isSmoking(self): 
    #some code here exactly same as female, so create a base class later 

class femaleSection(): 
    def isPregnent(self): 
    #some code here 

    def isSmoking(self): 
    #some code here exactly same as male, so create a base class later 

class medForm(maleSection, femaleSection): 
    def _init_(self, nameOfCustomer): 
     #At the moment not sure if I need anything here 

Эти два утверждения являются уродливыми. Каков наилучший способ справиться с этим? Также я слышал, что использование Super может быть сложным, поэтому, если возможно, я бы не хотел использовать Super и держать его простым. Это выполняется на Win7, Python 3.4. sys.version_info (major = 3, minor = 4, micro = 3, releaselevel = 'final', serial = 0)

Я ценю любую помощь, спасибо.

+0

Во-первых: установите Python 3.6 и пойдите отсюда, если возможно - нет причин идти со старыми версиями – jsbueno

+0

Секон: нет ничего сложного в использовании 'super' - не использовать его _much_ trickier. Не пытайтесь избежать этого. – jsbueno

+0

Оцените помощь, но я не могу обновить, слишком много зависимостей. Если бы вы могли дать мне пример с супер о том, как решить мою проблему, было бы очень приятно. – usustarr

ответ

1

Для этого типа проблемы наилучшим подходом является использование наследования. Это экономит вам много времени, особенно если вам нужно что-то изменить позже.

Попробуйте что-то вроде этого:

class patientSection(): 
     def isSmoking(self): 
      #the code here is the same for both male and female 

    class maleSection(patientSection): 
     #no code here, since we have access to isSmoking already 

    class femaleSection(patientSection): 
     #again, we have access to isSmoking 
     def isPregnant(self): 
      #something here 

Вы можете объявить экземпляр просто patientSection, если вы хотите задать только гендерно нейтральны вопросы; однако вам необходимо использовать функцию femaleSection для использования метода isPregnant.

+0

A. McKernan, это разница между проблемой и решателем проблем. Большое вам спасибо за помощь. Я действительно надеялся, что у Python может быть какой-то слайковый способ понять это. – usustarr

+0

@usustarr без проблем, я счастлив, что смогу помочь! Удачи! –