Python:重写子类中的静态成员

Python:重写子类中的静态成员,python,inheritance,static-members,Python,Inheritance,Static Members,我确实有一个抽象基类a。这包括一个静态方法名称。 但是,调用name()应该为具体的子类生成其名称 下面的示例显示了我的问题 from abc import ABCMeta, abstractmethod class A(metaclass=ABCMeta): _name = "A" @staticmethod def name(): return A._name # What to do here? @abstractmethod

我确实有一个抽象基类
a
。这包括一个静态方法
名称
。 但是,调用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

这可能吗?

这里不应该使用staticmethod,应该使用classmethod。它将类作为第一个参数,通常称为
cls
,因此可以执行
cls.\u name

此处不应使用staticmethod,而应使用classmethod。它将类作为第一个参数,通常称为
cls
,因此您可以执行
cls.\u name