2012-02-03 3 views
0

에서 언 바운드 방법에 액세스 할 부모 클래스 I는 언 바운드 방법 및 내부 정적 클래스와이 클래스가() ClassB.getFoo()를 명시 적으로 구현하지 않고 ClassB.Foo를 반환 할 수 있습니까? 을 반환하면 ClassA.Foo을 작성하는 것이 분명히 작동하지 않습니다.상속 및 파이썬

답변

4

귀하의 getFoo classmethod해야한다 :

class ClassA(): 
    class Foo(): 
     pass 

    @classmethod 
    def getFoo(cls): 
     return cls.Foo 

클래스 메소드가 자신의 첫 번째 인수로 자신의 클래스를 전달, 인스턴스 메소드는 첫 번째 인수로 인스턴스를 전달하는 방식과 비슷합니다. ClassA를 하위 클래스로 만들면 적절한 클래스가 전달됩니다.

+0

. 감사. – Chris

0

@Ned Batchelder의 답변 외에도 정적 방법을 사용하여 비슷한 목표를 달성 할 수 있습니다.

class ClassA(): 
    class Foo(): 
     def fooTest(self): 
     print("Hello from {}!".format(self.__name__)) 

    @staticmethod 
    def getFoo(): 
    return ClassA.Foo 

class ClassB(ClassA): 
    pass 

그리고 테스트와 : 나에게

>>> Foo = ClassB.getFoo() 
>>> foo = Foo() 
>>> foo.fooTest() 
Hello from Foo! 

는 파이썬 언어의 아름다움을 보여줍니다 - 같은 문제를 해결하는 여러 가지 방법이 일반적이 있습니다 ... 그것 뿐이다