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

ここでは staticmethod を使用しないでください。classmethod を使用する必要があります。これは、通常は と呼ばれる最初のパラメータとしてクラスを取るclsので、 を行うことができますcls._name

于 2013-07-30T14:20:34.970 に答える