Python属性成员变量属性的别名

时间:2014-01-30 17:38:57

标签: python properties python-2.x

我想创建一个类属性(名为“v”),其值为“x.val” 其中x是类的属性值。

我设计如下代码......但是当我为属性“v”分配新值时,它不起作用, “x.val”的值不会改变。

  1. 首先,我创建一个新的对象PClass,那时,v属性和“x.val”具有相同的值是1,值为“x.val”

  2. 我将新值9999分配给“v”。预期值为“v.val”的值将更改为9999 但事实并非如此。 “v”的值更改为9999但“v.val”仍为1。 此外,它似乎永远不会达到函数“setv”。

  3. 我不知道为什么会发生这种情况?任何理想,请告诉我!

    为所有人感恩!

    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()
    

2 个答案:

答案 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()