В классах python @property - хороший декоратор, который позволяет избежать использования явных функций setter и getter. Однако это связано со стоимостью накладных расходов в 2-5 раз выше, чем у "классической" функции класса. В моем случае это вполне нормально в случае установки свойства, где накладные расходы несущественны по сравнению с обработкой, которая должна быть выполнена при настройке.
Однако при получении свойства мне не нужна обработка. Это всегда просто "возвращение self.property". Есть ли элегантный способ использовать установщик, но не использовать геттер, не нужно использовать другую внутреннюю переменную?
Чтобы проиллюстрировать, класс ниже имеет свойство "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 нс в среднем, а вызов "_var" занимает в среднем 44 нс.