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