python属性装饰器[重复]

Posted

技术标签:

【中文标题】python属性装饰器[重复]【英文标题】:python property decorator [duplicate] 【发布时间】:2012-07-15 20:31:43 【问题描述】:

可能重复:Real world example about how to use property feature in python?

我对以下代码中看到的装饰器@property 有疑问。有人可以完全解释为什么有人会使用@property 装饰器吗?我知道@property 等同于isActive = property(isActive),但是方法属性实际上对它的参数做了什么?如果我从InputCell 类调用isActive 方法,实际会发生什么?提前致谢。

class InputCell(object):
    def __init__(self, ix, iy, inputData):
        self.ix = ix
        self.iy = iy
        self.InputData = inputData

    @property
    def isActive(self):
        return self.InputData[self.ix][self.iy]

【问题讨论】:

装饰器的文档实际上在第三句话中解释了这一点:docs.python.org/py3k/library/… (如果您要调用InputCell().isActive(),您可能会得到一个异常,说明inputData[ix][iy] 的值是不可调用的。) @property 用于使函数看起来像一个属性。您可以使用它来确保在访问属性时执行某些操作。例如,如果您有大量代码使用以度数表示的角度参数,然后在内部决定要以弧度跟踪角度,您可以创建属性方法来隐藏内部使用的弧度这一事实。 我意识到这是旧的,但你忘了在最后一行中将“i”大写。应该是 return self.InputData[self.ix][self.iy] 【参考方案1】:

它只是语法糖。它允许方法调用看起来像变量访问或赋值。

这可能有用的一种方法是,如果您想将以前简单变量的东西更改为实际计算或使用其他代码验证的东西。如果将其设为属性,则可以在不破坏任何现有代码的情况下执行此操作。另一种方法是用于对象属性的缓存、延迟初始化等。

【讨论】:

以上是关于python属性装饰器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

“@”装饰器(在 Python 中)[重复]

python装饰器参数[重复]

Python,如何添加另一个装饰器来过滤现有多装饰器的输出与python中的属性?

python装饰器,嵌套函数[重复]

Python装饰器,自我混淆[重复]

Python装饰器,自我混淆[重复]