続・pythonでクラスの中でのデフォルト引数に嵌った
class Test2(): alt = "fuga" def p(self, arg = alt): print arg t = Test2() t.p("hoge") # >>> hoge t.p() # >>> fuga t.alt = "piyo" t.p() # >>> fuga
あー、この方法だとデフォルト値の変更が効かないからダメだ(デフォルト値は関数定義の時にだけ評価される)。
さらに調べてみたところ、このようにするのがいまのところ一番良いみたい。
class Test3(): alt = "fuga" def p(self, arg = None): if arg is None: arg = self.alt print arg t = Test3() t.p("hoge") # >>> hoge t.p() # >>> fuga t.alt = "piyo" t.p() # >>> piyo
これはちょっと面倒だなぁ。