我有多個使用單個變量的函數,這個變量的計算代價很高,所以我不想重複這個。我有兩個簡單的方法來做到這一點,並想知道你覺得哪種方法更「pythonic」或更好的方法。哪種方法最爲Pythonic?處理變量是否存在
class A:
def __init__(self):
self.hasAttr = False
def compute_attr(self):
self.attr = 10
self.hasAttr = True #for func2 only
def func1(self):
try:
print self.attr == 10
except AttributeError:
self.compute_attr()
self.func1()
def func2(self):
if not self.hasAttr: self.compute_attr()
print self.attr == 10
a = A()
a.func1()
a.func2()
func1使用一個簡單的嘗試,除了捕獲AttributeError並在這種情況下計算屬性。 func2使用存儲的布爾值來檢查計算是否已完成。
是否有任何理由,一種方法會比另一種方法更受歡迎?此外,在func2中定義一個做檢查的裝飾器會有什麼意義嗎?
感謝您的任何幫助。
注意,Python有一個內置的'hasattr' –
有[一個更好的方法(http://stackoverflow.com/questions/3012421 /蟒蛇-memoising遞延查對財產裝飾)。 –
可能重複的[Python - 延遲加載類屬性](http://stackoverflow.com/questions/17486104/python-lazy-loading-of-class-attributes) –