我有一个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)
?如何给子类我想要的行为?在
描述符只适用于新样式类(那些直接或间接从
object
继承的类)。在旧样式的类上对描述符__get__
方法有一些支持,但这种支持是有限的。在您使用的} class ,那么肯定是这样,该模块中的类都是旧样式。在
PriorityQueue
类可能不是从object
继承的。如果这是^{您调用
PriorityQueue.__init__
与此无关。在相关问题 更多 >
编程相关推荐