2012-02-03 17 views
0

に結合していない方法で親クラスにアクセスするには、私の中に結合していないメソッドと静的クラスで、このクラスを持っていますClassB.getFoo()を明示的に実装せずにClassB.Fooを返すには? を返すと、ClassA.Fooを書くことは明らかにうまくいかない。継承とパイソン

答えて

4

あなたgetFooクラスメソッドでなければなりません:

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! 

この

は、Python言語の美しさを実証 - 同じ問題を解決するための複数の方法が通常あります...それだけです