向Python子类添加描述符

2024-10-02 22:28:39 发布

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

我有一个python类继承了一个优先级队列,我还使用一个描述符向该类添加一个属性,如下所示:

from Queue import PriorityQueue
class My_Class(PriorityQueue):
    my_attr = NonNegativeInt(0)

    def __init__(self):
        PriorityQueue.__init__(self)

描述符的实现方式如下:

^{pr2}$

当我调用My_Class.my_attr = -1时,我没有得到任何异常。但是,如果我将My_Class改为这个,我将得到异常罚款:

class My_Class(object):
    my_attr = NonNegativeInt(0)

    def __init__(self):
        pass

有趣的是,My_Class的第一个实现从my_attr属性开始,它只是不执行NonNegativeInt中的__set__函数。在

为什么更改超类会改变描述符的工作方式?这和这一行有关吗:PriorityQueue.__init__(self)?如何给子类我想要的行为?在


Tags: fromself属性队列initmydef方式
1条回答
网友
1楼 · 发布于 2024-10-02 22:28:39

描述符只适用于新样式类(那些直接或间接从object继承的类)。在旧样式的类上对描述符__get__方法有一些支持,但这种支持是有限的。在

您使用的PriorityQueue类可能不是从object继承的。如果这是^{} class,那么肯定是这样,该模块中的类都是旧样式。在

您调用PriorityQueue.__init__与此无关。在

相关问题 更多 >