2

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

这可能吗?

4

1 回答 1

4

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

于 2013-07-30T14:20:34.970 回答