如何从子类访问静态函数。
class Parent:
bar = []
@classmethod
def foo(cls):
print(' | '.join(cls.bar))
class Child_A(Parent):
bar = ['abs', 'arq', 'agf']
foo() # ERROR: NameError: name 'foo' is not defined
### abs | arq | agf
class Child_B(Parent):
bar = ['baz', 'bux', 'bet']
foo() # ERROR: NameError: name 'foo' is not defined
### baz | bux | bet
class Child_C(Parent):
bar = ['cat', 'cqy', 'cos']
foo() # ERROR: NameError: name 'foo' is not defined
### cat | cqy | cos
每个孩子都有自己的一组bar
列表,我希望他们使用父类的foo()
函数打印出正确的字符串。
答案 0 :(得分:1)
使用类名
访问类方法所以在你的子类中,foo方法是继承的,但是你必须用类名
来调用它class Parent:
bar = []
@classmethod
def foo(cls):
print(' | '.join(cls.bar))
class Child(Parent):
bar = ['baz', 'qux', 'far']
Child.foo() # This will make cls Child class and access child's bar element
### baz | qux | far
答案 1 :(得分:1)
class Parent:
bar = []
@classmethod
def foo(cls):
print(' | '.join(cls.bar))
class Child(Parent):
bar = ['baz', 'qux', 'far']
Child.foo()
类方法是绑定到类而不是其对象的方法。它不需要创建类实例。 Classmethod将始终返回同一个类的实例而不是子类。实际上,classmethod将打破OOP的规则。