<分区>
我正在尝试了解 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 纳秒
10000000 次循环,最好的 3 次:每次循环 89.7 ns
很明显,如果您要频繁地与对象对话,@property 和@setter 装饰器就比较差了。我的问题很简单,为什么要使用它?我很想听听人们可能拥有的这些装饰器的任何用例。谢谢。