1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み】NameError: 名前 'self' が定義されていません。

2022-01-12 21:10:13

質問

コードは次のとおりです。

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