Python3:从子类访问静态函数

时间:2017-05-30 04:58:24

标签: python parent-child static-methods

如何从子类访问静态函数。

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()函数打印出正确的字符串。

2 个答案:

答案 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的规则。