【问题标题】:Python: Override static member in subclassPython:覆盖子类中的静态成员
【发布时间】:2013-07-30 14:11:02
【问题描述】:

我确实有一个抽象基类A。这包括一个静态方法name。 然而,调用 name() 应该产生具体的子类它的名字

下面的例子说明了我的问题

from abc import ABCMeta, abstractmethod

class A(metaclass=ABCMeta):
    _name = "A"

    @staticmethod
    def name():
        return A._name # What to do here?

    @abstractmethod
    def foo(self):
        pass

class B(A):
    _name = "B"  # Or how to override A._name?
    def foo(self):
        return "Foo"

class C(A):
    _name = "C"
    def foo(self):
        return "Bar"

print(B().foo(), B.name()) # Should print: Foo, B
print(C().foo(), C.name()) # Shoudl print: Bar, C

这可能吗?

【问题讨论】:

    标签: python inheritance static-members


    【解决方案1】:

    你不应该在这里使用静态方法,你应该使用类方法。即以类为第一个参数,通常称为cls,所以可以做cls._name

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2016-01-19
      • 1970-01-01
      • 2011-05-08
      • 2011-03-11
      • 1970-01-01
      • 2011-03-31
      • 2018-10-05
      • 2016-03-03
      相关资源
      最近更新 更多