Python类@property:使用setter但避免getter?

7 浏览
0 Comments

Python类@property:使用setter但避免getter?

在Python类中,@property是一个很好的装饰器,避免了使用显式的setter和getter函数。然而,它的运行效率是"经典"类函数的2-5倍。在我的情况下,当设置属性时,这个开销是可以接受的,因为相对于设置操作需要进行的处理,这个开销是微不足道的。

然而,当获取属性时,我不需要进行任何处理。它总是返回"self.property"。有没有一种优雅的方式可以使用setter但不使用getter,而不需要使用不同的内部变量呢?

仅仅为了举例说明,下面的类有一个属性"var",它指向内部变量"_var"。调用"var"比调用"_var"需要更长的时间,但如果开发人员和用户都可以只使用"var"而不需要跟踪"_var",那将是很好的。

class MyClass(object):
  def __init__(self):
    self._var = None
  # 属性"var"。首先是getter,然后是setter
  @property
  def var(self):
    return self._var
  @var.setter
  def var(self, newValue):
    self._var = newValue
    #... 还有很多其他的操作
  # 经常使用"var"!如何避免getter的开销,而不调用self._var!
  def useAttribute(self):
    for i in xrange(100000):
      self.var == 'something'

对于那些感兴趣的人来说,在我的电脑上,调用"var"平均需要204纳秒,而调用"_var"平均需要44纳秒。

0