我试图理解Python中@property decorator的实用程序。具体来说,我使用如下属性设置一个类:
class A(object):
def __init__(self, x):
self._x = x
@property
def x(self):
return self._x
@x.setter
def x(self, new_x):
self._x = new_x
我还设置了一个没有提供相同功能的属性的类:
^{pr2}$我为每种类型创建一个实例:
a = A(10)
b = B(10)
在iPython中运行%timeit会得到以下结果
%timeit a.x
%timeit b._x
1000000个循环,最多3:213个ns/环路
10000000个循环,最多3个:每个环路67.9 ns
%timeit a.x = 15
%timeit b._x = 15
1000000个环路,最好每个环路3:257ns
10000000个环路,最好是3个:每个环路89.7ns
很明显,@property和@setter修饰符都是低劣的,如果你要以显著的频率与对象交谈的话。我的问题很简单,为什么要用它?我很有兴趣听到人们可能拥有的这些装饰器的任何用例。谢谢。在
如果属性如此简单,不要使用
property
。你不需要它。property
当获取和设置一个属性需要做更多的工作时,例如,如果涉及计算:当以前简单的
__dict__
查找突然需要执行额外的工作时,它们特别有用。您可以切换到属性,而无需在每个调用位置添加方法调用括号。简单的答案是,基本属性不使用
property
s。它们对于存储或检索时需要附加逻辑的属性非常有用。例如,具有从其他属性派生的值的属性或需要进行错误检查或其他特殊筛选的属性。使用property
s可以使用其他语言中常见的通用setter/getter模式,而不是强制使用冗长的样板文件。相关问题 更多 >
编程相关推荐