2017-11-11 2 views
0

죄송합니다, 이것은 바보 같은 질문 일지 모르지만 그게 나에게 매우 혼란 스럽습니다. 나는 아이의 부모 방법에 접근하고그랜드 자식 클래스의 조부모 메서드를 호출

class A(): 
def say(self): 
    print("A") 

class B(A): 
def say(self): 
    print("B") 

class C(B): 
def say(self,*args, **kwargs): 
    return super(C, self).say(*args, **kwargs) 

, 그것은 B 인쇄,하지만 난 우리가 클래스 B 액세스를 받고 같은 클래스 A에서 방법에 액세스하려면 : 이제 우리는 다음과 같은 클래스가 있다고 가정하자.

클래스 B에 super을 추가 할 수 있지만, 클래스 B을 수정하고 싶지 않습니다. 그래서 A에서 직접 C 클래스의 메소드를 얻는 옵션이 있습니까?

>>> a = A() 
>>> a.say() 
A 
>>> b = B() 
>>> b.say() 
B 
>>> c = C() 
>>> c.say() 
A 
B 
C 

참고 :

다음
class A(): 
    def say(self): 
     print("A") 

class B(A): 
    def say(self): 
     print("B") 

class C(B): 
    def say(self): 
     A.say(self) 
     B.say(self) 
     print("C") 

터미널에서 그것을 테스트하려면 : AB 클래스 didn를 때문에이 argskwargs 하락이 같은 A.say(self)를 호출 할 수

+0

A.say()에 의해 클래스 A라고하는 방법을 직접 호출 할 수 있습니다.) 메서드를 호출합니다. –

+4

@PeterMajko 당신은 A의 인스턴스가 필요합니다. Sanjay - 왜 그런 짓을하고 싶니? 한편으로는 상속을 사용하고 있고 다른 한편으로는 그것을 해체하려고합니다. 당신이 성취하기를 원하는 것이지, * 어떻게 *하려는 것이지 더 잘 게시하십시오. 목표를 달성하는 더 좋은 방법이있을 수 있습니다. – alfasin

+2

클래스 C에서 say() 메소드는'super (B, self), say()'에 의해 A에 접근 할 수 있습니다. –

답변

0

그 논점을 사용하지 마십시오. say을 길게 꾸미려는 경우 간단하게 A.say(self, *args, **kwargs)으로 전화하고 A.say이 반환하는 내용이 있으면 다시 돌려 줄 수 있습니다.

+0

이것은 좀 더 일반적인 접근 방식으로 생각할 수도 있습니다 : super (super (self .__ class __, self), self) .say (* args, ** kwargs) –

관련 문제