Интересно знать о производительности, когда ее так легко измерить:
$ python -mtimeit -s'class X(object):
> @property
> def y(self): return 23
> x=X()' 'x.y'
1000000 loops, best of 3: 0.685 usec per loop
$ python -mtimeit -s'class X(object):
def y(self): return 23
x=X()' 'x.y()'
1000000 loops, best of 3: 0.447 usec per loop
$
(на моем медленном ноутбуке - если вы удивляетесь, почему во втором случае нет подсказок вторичной оболочки, это потому, что я построил его с первого раза со стрелкой вверх в bash, и это повторяет структуру переноса строк, но не подсказки -!)
.
Таким образом, если вы не знаете, что значение 200+ наносекунд или около того будет иметь значение (узкий внутренний цикл, который вы пытаетесь максимально оптимизировать), вы можете позволить себе использовать подход со свойством; если вы сделаете некоторые вычисления, чтобы получить значение, 200+ наносекунд, конечно, станут меньшей долей общего времени.
Я согласен с другими ответами, что если вычисления становятся слишком тяжелыми, или вам могут понадобиться параметры и т. Д., Метод предпочтительнее - аналогично, я добавлю, если вам когда-нибудь понадобится спрятать вызываемый объект, но только назовите это позже, и другие причудливые уловки функционального программирования; но я хотел сделать количественную оценку производительности, поскольку timeit
делает такие измерения такими простыми! -)