Python:覆盖子类中的静态成员

时间:2013-07-30 14:11:03

标签: python inheritance static-members

我有一个抽象基类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

这可能吗?

1 个答案:

答案 0 :(得分:4)

你不应该在这里使用static方法,你应该使用classmethod。这会将类作为第一个参数,通常称为cls,因此您可以执行cls._name