これは期待された動作であるかどうかわかりませんがgetattr
built_inメソッドです。 getattr
は、実際の引数(2nd)が条件を満たす場合でも、デフォルト(3rd)引数を実行します。 例: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
がそのような振る舞いをしているのかを教えてください。そして、それをやめることをやめることができます(2番目の引数があれば3番目の引数を実行しません)。 まず、hasattr
を使用してparam1
が存在するかどうかを確認してから、必要があるかどうかを確認してください。
これは余分な機能を追加するオーバーヘッドになると思うのですが、代わりに 'hasattr'チェックを行うべきだと思います。それにもかかわらず、ありがとう。 – MaNKuR
'a'がattr' param'を持つときに 'func()'が評価されないようにするには、 'getattr(a、 'param'、None)またはfunc()'に変更できます。 'または'の後に有効なコードは* lazy *になります。 –
ありがとう@ Chang.Jian、これは便利なトリックです。どのように私はこれを逃すことができる。 – MaNKuR