我正在尝试了解Python中@property装饰器的实用程序。具体来说,我使用如下属性设置了一个类:
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
Run Code Online (Sandbox Code Playgroud)
而且我还建立了一个没有提供相同功能的属性的类:
class B(object):
def __init__(self, x):
self._x = x
Run Code Online (Sandbox Code Playgroud)
我创建每个实例:
a = A(10)
b = B(10)
Run Code Online (Sandbox Code Playgroud)
在iPython中运行%timeit会产生以下结果
%timeit a.x
%timeit b._x
Run Code Online (Sandbox Code Playgroud)
1000000次循环,每循环3:213 ns的最佳时间
10000000次循环,最佳3:每个循环67.9 ns
%timeit a.x = 15
%timeit b._x = 15
Run Code Online (Sandbox Code Playgroud)
1000000个循环,每个循环最好3:257 ns
10000000次循环,每循环3:89.7 ns最佳
显然,如果您要以很高的频率与该对象交谈,则@property和@setter装饰器会逊色。我的问题就是,为什么要使用它?我想听听人们可能拥有的这些装饰器的用例。谢谢。