なぜそのような構造
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
'b'をNoneに設定するオプションも必要な場合:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
Google経由でここに到着した場合は、クラス関数の最初のパラメーターとしてselfを指定したことを確認してください。特に、関数内でそのオブジェクトの値を参照しようとする場合。
def foo():
print(self.bar)
> NameError:名前 'self'は定義されていません
def foo(self):
print(self.bar)
>「おめでとうございます、NameErrorを取り除きました!」