我试图了解 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
我还设置了一个没有提供相同功能的属性的类:
class B(object):
def __init__(self, x):
self._x = x
我为每个创建一个实例:
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 次中的最佳:每个循环 257 ns
10000000 次循环,3 次中的最佳:每个循环 89.7 ns
显然,@property 和 @setter 装饰器在你与对象交谈的频率很高时效果较差。我的问题很简单,为什么要使用它?我很想听听人们可能拥有的这些装饰器的任何用例。谢谢。