Python でのプロパティの効率性に関する懸念として、それらがいつ、どのくらいの頻度で呼び出されるのか疑問に思っていました。
簡単な例を使用するために、namedtuple をサブクラス化し、次のようなものがあるとします。
from collections import namedtuple
from math import pi
class Circle (namedtuple('Circle', 'x, y, r')):
__slots__ = ()
@property
def area(self):
return pi*self.r**2
unitCircle = Circle(0, 0, 1.0)
print 'The area of the unit circle is {0} units'.format(unitCircle.area)
面積は最初に呼び出されるまで計算されないと思いますが、一度呼び出されると、その値は何かが変更されるまでキャッシュされますか、それとも呼び出されるたびに再計算されますか?
別の言い方をすれば、(これとは異なり) 計算に比較的コストがかかり、繰り返し使用されるプロパティがある場合、それをプロパティにする必要がありますか、それとも値として格納して明示的に計算する方が効率的ですか?それは本当に更新する必要がありますか?