質問

なぜこのような構造

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を取り除きました!"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top