キーワード引数を追加します:
def bar(self, value=2):
self.a = value
ここでは、明示的に指定されていない場合value
のデフォルトは次のとおりです。2
>>> foo = Foo()
>>> foo.bar()
>>> foo.a
2
>>> foo.bar(5)
>>> foo.a
5
関数シグネチャは一度だけ作成されることに注意してください。デフォルトは関数オブジェクトに保存されます。よくある間違いは、関数を呼び出すたびにデフォルトが評価されると思い込んでしまうことです。
import datetime
def ham(now=datetime.datetime.now()):
print now
ここでは、インポートされ、Python が関数オブジェクトを作成now
した瞬間に修正されます。bar
>>> ham()
2013-10-24 10:20:26.024775
>>> # wait some time
...
>>> ham()
2013-10-24 10:20:26.024775
デフォルト値が変更可能である場合、さらに驚くべきことになります。
def eggs(param, value=[]):
value.append(param)
print value
繰り返し呼び出すeggs(2)
と、value
リストが大きくなり、2
呼び出すたびに新しい値がリストに追加されます。
>>> eggs(2)
[2]
>>> eggs(2)
[2, 2]
>>> eggs(2)
[2, 2, 2]
これについてのより長い議論については、「最小の驚き」と可変デフォルト引数を参照してください。