成员变量属性的Python属性别名
我想创建一个值为“x.val”的类属性(名为“v”) 其中x是类的属性值 我设计如下代码。。。但当我给属性“v”赋值时,它不起作用, “x.val”的值不变成员变量属性的Python属性别名,python,properties,python-2.x,Python,Properties,Python 2.x,我想创建一个值为“x.val”的类属性(名为“v”) 其中x是类的属性值 我设计如下代码。。。但当我给属性“v”赋值时,它不起作用, “x.val”的值不变 首先,我创建了一个新的对象PClass,当时,v属性和“x.val”的值相同,都是1,即“x.val”的值 我为“v”指定了一个新值9999。预期的is值“v.val”将更改为9999 但事实并非如此。“v”的值更改为9999,但“v.val”仍为1。 此外,它看起来好像从未达到“setv”功能 我不知道为什么会发生这种情况?任何理想,请让
class ValClass:
def __init__(self):
self.val = 1
self.var = 2
def pr(self):
print "==== PR ===="
print self.val #1
print self.var #2
class PClass:
x = ValClass()
y = '1'
def getv(self):
return self.x.val
def setv(self, val):
self.x.val = val
def delv(self):
del self.x.val
v = property(getv, setv, delv)
def solv(self):
print self.v #9999
self.x.pr()
if __name__ == '__main__':
p = PClass()
p.v = 9999
print p.v
p.solv()
setv
未调用,将class-PClass:
更改为class-PClass(对象):
使PClass成为对象的子类setv
未调用,将class-PClass:
更改为class-PClass(对象):
使PClass成为object的子类属性
只能用于新样式的类。如果您的类不继承自对象
,则无法实现属性
class PClass(object):
def __init__(self):
self.x = ValClass() # if you don't do this, all PClass objects will share an x
self.y = 1
@property
def v(self):
return self.x.val
@v.setter
def v(self, val):
self.x.val = val
@v.deleter
def v(self):
del self.x.val
def solv(self):
print self.v #9999
self.x.pr()
属性
只能用于新样式的类。如果您的类不继承自对象
,则无法实现属性
class PClass(object):
def __init__(self):
self.x = ValClass() # if you don't do this, all PClass objects will share an x
self.y = 1
@property
def v(self):
return self.x.val
@v.setter
def v(self, val):
self.x.val = val
@v.deleter
def v(self):
del self.x.val
def solv(self):
print self.v #9999
self.x.pr()
小心,
p.x
在实例之间共享。改为在\uuu init\uuu
中创建ValClass()
的新实例。请小心,p.x
在实例之间共享。改为在\uuu init\uuuu
中创建ValClass()
的新实例。区别在于旧样式类与新样式类的区别。只有新样式的类支持使属性
工作所需的描述符协议。区别在于旧样式的类与新样式的类。只有新型类支持使属性
工作所需的描述符协议。