【问题标题】:Python class property decorators not workingPython类属性装饰器不起作用
【发布时间】:2016-07-30 12:15:37
【问题描述】:

我正在尝试让 Python 的装饰器为我工作。我无法理解为什么这不起作用:

class toy(object):

    @property
    def toyname(self):
        return 'lol'

a = toy
print(a.toyname)

当我运行它时,我得到以下输出:

<property object at 0x03362FC0>

该属性似乎没有被评估。

我已经看到 Python 2.x 的几个答案提到我需要子类化 object 才能使属性起作用;但是,到目前为止我遇到的答案并没有解决我的问题。

【问题讨论】:

  • 您是在尝试创建 class 属性还是 instance 属性?

标签: python python-3.x properties


【解决方案1】:

导致问题的是a = toy 行。 a = toy 的意思是“将变量a 指向toy 类的定义”。你真正想做的是a = toy(),实例化一个toy类型的对象并保存在a中。

【讨论】:

  • 谢谢!那是我的问题。这真是一个令人发指的错误!
【解决方案2】:

toy 是您班级的蓝图。 toy() 是您可以使用的类的新副本,或者是一个新实例。您需要“实例化”它,这意味着您需要创建一个新的类实例来分配给 a。换句话说,你需要a = toy() 而不是a = toy

试试这个:

class toy(object):
    @property
    def toyname(self):
        return 'lol'

a = toy()
print(a.toyname)

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 2018-12-03
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多