成员变量attribu的Python属性别名

2024-05-18 23:30:25 发布

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

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

我设计如下代码。。。但当我给属性“v”赋值时,它就不起作用了, “x.val”的值不变。在

  1. 首先,我创建了一个新的object PClass,此时v属性和“x.val”具有相同的值1,即“x.val”

  2. 我给“v”赋值9999。“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()

Tags: self属性vardefvalprclassprint
2条回答

未调用setv,请将class PClass:更改为class PClass(object):,使PClass成为object的子类

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

相关问题 更多 >

    热门问题