【发布时间】: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]