2012-02-03 113 views
0

在不受约束的方法访问父类的我有这个类的不受约束的方法和静态类中:现在传承与蟒蛇

class ClassA(): 
    class Foo(): 
     pass 

    def getFoo(): 
     return ???.Foo 

,如果我继承ClassA的一个ClassB的我怎么ClassB.getFoo ()返回ClassB.Foo而不显式实现ClassB.getFoo()?返回super().Foo不起作用,写入ClassA.Foo也不明显。

回答

4

getFoo应该是一个类方法:

class ClassA(): 
    class Foo(): 
     pass 

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

类方法传递他们的类作为第一个参数,类似于实例方法是如何传递的实例作为第一个参数。当您继承ClassA时,会传递适当的类。

+0

就是这样。谢谢。 – Chris 2012-02-03 18:43:32

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语言的美 - 通常有解决同一问题的多种途径......