Python @property 装饰器不起作用

Posted

技术标签:

【中文标题】Python @property 装饰器不起作用【英文标题】:Python @property decorator not working 【发布时间】:2014-03-03 11:39:47 【问题描述】:

谁能发现这个@property 装饰器有问题?我似乎无法让它正确断言。我确定我做错了一些非常简单的事情,但是谁能把我疲惫的眼睛指向正确的方向?

class A:
    def __init__(self):
        self.a = 0
        self._b = 0

    @property
    def b(self):
        return self.b

    @b.getter
    def b(self):
        if self._b is None:
            return 0
        return self._b

    @b.setter
    def b(self, val):
        self._b = (val * 20)


def test_getter_setter():
    obj = A()
    obj.a = 1
    #obj.b = 2
    print obj.a, obj.b
    obj.b = 2
    print obj.a, obj.b
    assert obj.b == 40

test_getter_setter()

【问题讨论】:

【参考方案1】:

@property 装饰器仅适用于新样式类。继承自object

class A(object):

通过该更改,您的测试功能通过。

【讨论】:

我所有的悲伤都神奇地消失了!谢谢,Martijn 博士! 不是所有的python类都应该自动继承自对象吗?

以上是关于Python @property 装饰器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python:加载的 NLTK 分类器不起作用

SwiftUI 列表正在工作,但选择器不起作用

Python中的“ @”(@)符号有啥作用?

CAD2014安全系统软件锁许可管理器不起作用或未正确安装

引导日期选择器不起作用

日期选择器不起作用[重复]