なぜそのような構造
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
エラーが発生しますNameError: name 'self' is not defined
か?
デフォルトの引数値は関数定義時に評価されますがself
、関数呼び出し時にのみ使用可能な引数です。したがって、引数リスト内の引数は相互に参照できません。
None
引数をデフォルトに設定し、そのテストをコードに追加するのは一般的なパターンです。
def p(self, b=None):
if b is None:
b = self.a
print b
2022 年更新: Python 開発者は現在、将来の Python バージョンの遅延バインド引数の既定値を検討しています。
'b' を None に設定するオプションも必要な場合:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b