我有一个抽象基类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
这可能吗?
答案 0 :(得分:4)
你不应该在这里使用static方法,你应该使用classmethod。这会将类作为第一个参数,通常称为cls
,因此您可以执行cls._name
。