2017-10-26 3 views
0

나는 세 클래스가 A, BC입니다.두 클래스에서 상속하는 객체 메서드 호출

A은 방법이 hello(self)입니다. BA에서 상속 받고 새 메서드 hello(self)을 구현합니다. CB에서 상속 받고 hello(self) 메서드를 다시 구현합니다.

이제 b = B() 인스턴스를 만들고 b.hello()을 호출하면 B.hello(b)과 같이 호출됩니다.

c = C() 개체를 만들고 c.hello()을 호출하면 C.hello(c) 대신 실제로 B.hello(c)을 호출하는 것이 문제입니다. 왜 그런가요?

내 코드는 다음과 같습니다 : 이것은 내 작동하지만

class A: 
    def hello(self): 
     self.helloHandler() 
    def helloHandler(self): 
     print('class A method') 

class B(A): 
    def helloHandler(self): 
     print('class B method') 

class C(B): 
    def helloHandler(self): 
     print('class C method') 

c = C() 
c.hello() 

. 이 시점에서 내 코드에는 수천 개의 행이 있습니다 ... 실제로 게시 할 수는 없지만 그 점이 중요합니다. 나는 그 문제가 무엇인지 모릅니다. 하위 클래스가 일부 메소드를 구현하도록 강제하는 확실하지 않은 이유로 중요하다면 abcmeta를 사용합니다.

편집 : 나는 똑같은 내 물건 두 개를 엉망으로 만들었습니다. 모든 것이 제대로 작동합니다!

+4

코드를 게시하십시오. –

+0

메타 클래스를 사용하는 경우 ABC에 정의 된 추상 메서드에서 상속 된 부모 클래스에 정의 된 구체적인 메서드를 오버로드하지 않아야합니다. – James

+0

문제를 해결하기 위해 투표를 종료 할 수 없습니다. – James

답변

2

문제점을 재현 할 수 없습니다. 당신이 정의한 것처럼 여기에 설치가 있습니다. BA에서 상속 받지만 그 방법은 오버로드됩니다; CB에서 상속 받지만 해당 메서드가 다시 오버로드됩니다.

C의 인스턴스를 만들고 hello()을 호출하면 올바른 오버로드 된 메서드가 C에서 사용됩니다.

class A: 
    def hello(self): 
     print('class A method') 

class B(A): 
    def hello(self): 
     print('class B method') 

class C(B): 
    def hello(self): 
     print('class C method') 

c = C() 
c.hello() 
# prints 
class C method 
0

모든 수업이 혼란 스럽습니다. 나는 매우 비슷한 두 개의 대상을 가지고 있습니다. 모든 것이 제대로 작동합니다.

관련 문제