【问题标题】:Python @property does not work as I want it to [duplicate]Python @property 不起作用,因为我希望它 [重复]
【发布时间】:2019-05-20 06:15:10
【问题描述】:

我有一个小代码,它定义了一个具有一个属性的类。然后当我期望在主程序中打印时,它们不会发生,上面代码的结果是'5':

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        print 'getter'
        return self._x

    @x.setter
    def x(self, x):
        print 'setter'
        self._x = x


def main():
    C.x = 5
    print C.x


if __name__ == '__main__':
    main()

我的问题是如何让这段代码打印出“getter”和“setter”?

【问题讨论】:

    标签: python properties


    【解决方案1】:

    如果您正确使用C(即创建它的实例),您将得到您所期望的:

    c = C()
    c.x = 5
    print(c.x)
    

    输出

    setter
    getter
    5
    

    【讨论】:

    • 哦,呵呵,他们也有这个问题。不过,它们也确实需要从object 继承; print 语法表明它们在 Python 2 上。
    • 如果我这样使用会产生开销吗?
    • @YotamHammer:开销与什么相比?您发布的代码不起作用?不要比较正确代码和错误代码的性能;如果你做错了,你可以随心所欲地做任何事情。
    • 你是对的,有没有更方便的方法来改变对象的 setter 和 getter 的行为?
    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2021-05-26
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多