@property是Python类中一个方便的装饰器,它可以避免使用显式的setter和getter函数。然而,与“传统”的类函数相比,它会带来2-5倍的开销。在我的情况下,当设置属性时,这并不重要,因为与要进行的处理相比,开销微不足道。
然而,当获取属性时,我不需要进行任何处理。它总是返回“return self.property”。有没有一种优雅的方式可以使用setter但不使用getter,而无需使用不同的内部变量呢?
仅作说明,以下类具有属性“var”,该属性引用内部变量“_var”。调用“var”比“_var”需要更长的时间,但如果开发人员和用户可以只使用“var”而不必跟踪“_var”,那将是很好的。
class MyClass(object):
def __init__(self):
self._var = None
# the property "var". First the getter, then the setter
@property
def var(self):
return self._var
@var.setter
def var(self, newValue):
self._var = newValue
#... and a lot of other stuff here
# Use "var" a lot! How to avoid the overhead of the getter and not to call self._var!
def useAttribute(self):
for i in xrange(100000):
self.var == 'something'
对于那些感兴趣的人,在我的电脑上,调用“var”平均需要204 ns,而调用“_var”平均需要44 ns。