2017-01-25 1 views
0

나는 의학 양식 수업을 가지고 있습니다. 이 양식은 남녀 모두에게 주어질 것입니다. 나는 클래스를 인스턴스화 할 때 남녀를 구별하지 않아야한다. 성별에 상관없이 동일한 방식으로 인스턴스를 만들고 성별에 관계없이 동일한 질문을 할 수 있다면 좋을 것입니다. 그러나 남자가 임신했는지 묻는 것은 어리 석다는 것을 깨닫게 될 프로그램은, 그 질문을하지 않거나 더 나쁘지 만, 부적절한 질문이라고 말하고 그것을 건너 뛰지 않을 것입니다. 이것은 기본 코드입니다.Python 3.4 상속

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 

이 두 if 문은 추악합니다. 이것을 처리하는 가장 좋은 방법은 무엇입니까? 또한 Super를 사용하는 것이 까다로울 수 있으므로 가능하면 Super를 사용하지 않고 간단하게 유지하려고합니다. 이것은 Win7, Python 3.4에서 실행 중입니다. sys.version_info (major = 3, minor = 4, micro = 3, releaselevel = 'final', serial = 0)

감사합니다.

+0

첫 번째로 : 가능하면 파이썬 3.6을 설치하고 여기로 가십시오. 이전 버전을 사용할 이유가 없습니다. – jsbueno

+0

Secon :'super' 사용에 까다로운 부분이 없습니다. 사용하지 않는 것이 더 까다 롭습니다. 그것을 피하려고하지 마십시오. – jsbueno

+0

도움이 되긴하지만 업그레이드가 너무 많아서 너무 많은 의존성이 있습니다. 내 문제를 해결하는 방법에 대해 수퍼바이저에게 모범을 보여줄 수 있다면 정말 좋을 것입니다. – usustarr

답변

1

이러한 유형의 문제의 경우 가장 좋은 방법은 상속을 이용하는 것입니다. 나중에 무언가를 변경해야하는 경우 특히 많은 시간을 절약 할 수 있습니다.

이 같은 시도 : 당신은 성 중립적 인 질문을하려는 경우 그냥 patientSection의 인스턴스를 선언 할 수

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 

을; 그러나 isPregnant 메서드를 사용하려면 femaleSection을 사용해야합니다.

+0

A. McKernan은 문제와 문제 해결사의 차이점이 없습니다. 도움 주셔서 대단히 감사합니다. 나는 정말로 파이썬이이를 이해할 수있는 길을 열어주기를 바랬다. – usustarr

+0

@usustarr 문제 없어요, 제가 도울 수있어서 기쁩니다! 행운을 빕니다! –