我不知道這是否是getattr
built_in方法的預期行爲。 getattr
也會執行默認(第3個)參數,即使實際參數(第2個)也滿足條件。 實施例:python getattr built_in方法執行默認參數
def func():
print 'In Function'
class A:
def __init__(self):
self.param = 12
a = A()
當運行getattr(a, 'param', Func())
它給出結果。記下我不想要的In Function
。
In Function
12
但是,當我執行getattr(a, 'param1', func())
即輸出
In Function
但我只是想,如果滿足條件導致的12
它完美的罰款。請讓我知道爲什麼getattr
有這樣的行爲,我們可以阻止他們這樣做(即不執行第三個參數,如果有第二個參數),將不勝感激,如果分享以Pythonic方式做替代方式。 首先想到的一件事是檢查param1
是否存在使用hasattr
然後做必要的。
我認爲這將是增加額外功能的開銷,相反,我認爲我應該使用'hasattr'檢查。不過謝謝。 – MaNKuR
如果你不希望在'a'有attr'param'時評估'func()',你可以改爲:'getattr(a,'param',None)或func()'。 'or'後的任何有效代碼都變成* lazy *。 –
謝謝@常健,這是很有用的把戲。我怎麼能錯過這個。 – MaNKuR