在不受约束的方法访问父类的我有这个类的不受约束的方法和静态类中:现在传承与蟒蛇
class ClassA():
class Foo():
pass
def getFoo():
return ???.Foo
,如果我继承ClassA的一个ClassB的我怎么ClassB.getFoo ()返回ClassB.Foo而不显式实现ClassB.getFoo()?返回super().Foo
不起作用,写入ClassA.Foo
也不明显。
在不受约束的方法访问父类的我有这个类的不受约束的方法和静态类中:现在传承与蟒蛇
class ClassA():
class Foo():
pass
def getFoo():
return ???.Foo
,如果我继承ClassA的一个ClassB的我怎么ClassB.getFoo ()返回ClassB.Foo而不显式实现ClassB.getFoo()?返回super().Foo
不起作用,写入ClassA.Foo
也不明显。
你getFoo
应该是一个类方法:
class ClassA():
class Foo():
pass
@classmethod
def getFoo(cls):
return cls.Foo
类方法传递他们的类作为第一个参数,类似于实例方法是如何传递的实例作为第一个参数。当您继承ClassA时,会传递适当的类。
只需添加我自己的想法就可以了:除了@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语言的美 - 通常有解决同一问题的多种途径......
就是这样。谢谢。 – Chris 2012-02-03 18:43:32