我想创建一个类属性(名为“v”),其值为“x.val” 其中x是类的属性值。
我设计如下代码......但是当我为属性“v”分配新值时,它不起作用, “x.val”的值不会改变。
首先,我创建一个新的对象PClass,那时,v属性和“x.val”具有相同的值是1,值为“x.val”
我将新值9999分配给“v”。预期值为“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()
答案 0 :(得分:2)
setv
未被调用,将class PClass:
更改为class PClass(object):
以使 PClass 成为对象的子类
答案 1 :(得分:2)
property
只能用于新式类。如果您的类不继承自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()