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

2024-06-17 12:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个元类,如下所示:

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

那么,我的印象是,下面两张照片的结果应该是一样的。在

^{pr2}$

但事实上我得到:

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

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

请注意,我不想instantiate the meta class。我只希望它的子实例具有.name@属性,而不必显式地为每个实例编写代码。在


Tags: ofthe实例nameselfreturn属性def