Python:抽象基类中的非抽象方法

时间:2017-12-30 18:25:42

标签: python oop abstract-class self-reference abc

我按如下方式实现元类:

from abc import ABCMeta

class Algorithm(metaclass=ABCMeta):
    # lots of @abstractmethods

    # Non-abstract method
    @property
    def name(self):
        ''' Name of the algorithm '''
        return self.__class__.__name__

class MyLittleAlgorithm(Algorithm):        
    def magic(self):
        return self.name

然后,我认为以下两个版画应该给出相同的结果。

a = MyLittleAlgorithm()
print(a.magic)
print(a.name)

但实际上我得到了:

>>> print(a.magic)
<bound method MyLittleAlgorithm.magic of <__main__.MyLittleAlgorithm object at 0x11242f438>>
>>> print(a.name)
MyLittleAlgorithm

我之后的行为是后者。 (我希望从Algorithm继承的每个算法都有一个.name @property,它可以用来引用它自己。)

请注意,我不想instantiate the meta class。我只是希望它的子节点的实例具有.name @property而不必为每个显式写出代码。

0 个答案:

没有答案