2013-08-21 2 views
0

계속 진행하기 전에 하위 클래스 별 처리를 수행하기 위해 supercass에서 코드에 메서드를 부탁합니다. 나는 C#에서 파이썬으로 최근에왔다. 아마도 ... 인터페이스를 사용할 것이다. 여기에 그 요지가 있습니다 (그림으로 그려지지만 작동하지 않습니다) :수퍼 클래스에서 메서드를 호출하려면 어떻게해야합니까? 정의가 완전히 하위 클래스로 이연됩니까?

class superClass: 
    def do_specific_stuff(self): #To be implemented entirely by the subclass, 
     #but called from the superclass 
     pass 

    def do_general_stuff1(self): 
     #do misc 

    def do_general_stuff2(self): 
     #do more misc 

    def main_general_stuff(self): 
     do_general_stuff1() 
     do_specific_stuff() 
     do_general_stuff2() 

나는 다소 복잡한 구현이 있습니다. 이 예제는 정확히 내가 처음 보는 사람을 이해하는 데 필요한 고통이며 훨씬 덜 고통 스럽습니다. 지금 do_specific_stuff()을 호출하면 오류가 발생합니다.

'글로벌 이름'do_specific_stuff '가 정의되지 않았습니다.

self.do_specific_stuff에 내가 오류를 얻을 나는이 '자기'를 추가

'형식 오류 :. do_specific_stuff() 0 위치 인수하지만 1 주어진 소요' 어떤 사람? 사전에 감사 ...

+0

보조 노트 : 기본 클래스에'do_specific_stuff' 메소드가 전혀 필요하지 않습니다. 파이썬이나 그 밖의 것들에는 "가상적이고 가상이 아닌 메소드"가 없습니다. 모든 메소드는 먼저 서브 클래스에서 찾는다. – abarnert

답변

4

def main_general_stuff(self): 
    self.do_general_stuff1() 
    self.do_specific_stuff() 
    ... 

문제는 당신이 self에 대한 명시 적 참조가되는 것입니다 할 필요가 : 파이썬은 당신이 그것없이 전역 함수를 의미 생각한다. Java에서와 같이 암시적인 this이 없음을 유의하십시오.이를 지정해야합니다.

+0

감사합니다. 그건 의미가 있지만, 방금 새 오류로 내 게시물을 업데이 트했습니다. 전달 된 인수 오류입니다. – StatsViaCsh

+0

당신의 업데이트에있는'TypeError'에 대해서 : 다른 (인자없는) 시그니처를 가진 서브 클래스 중 하나에'do_specific_stuff' 구현이 있습니까? – Alp

+1

@statsviacsh 당신은 아마도'def do_specific_stuff (self) :'로 정의하는 걸 잊었을 것입니다.'self' 인자가 서브 클래스 – vikki

관련 문제