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