144 なぜそのような構造 class A: def __init__(self, a): self.a = a def p(self, b=self.a): print b エラーを出しますNameError: name 'self' is not definedか? python nameerror — クリス ソース
159 デフォルトの引数値は、関数の定義時に評価されselfますが、関数呼び出し時にのみ使用できる引数です。したがって、引数リストの引数は相互に参照できません。 これは、引数をデフォルトに設定し、Noneそのテストをコードに追加する一般的なパターンです。 def p(self, b=None): if b is None: b = self.a print b — 統合 ソース 4 上記は非常にきれいではないと思いますが(私は物事がうまく機能するルビーから来ています)、上記は実際に回避策として機能します。pythonがパラメータリストでselfを使用不可にすることを選択したのは、依然として厄介です。 — 18年 2 @shevy:「自己」はPythonでは特別な意味はありません。これは、従来の方法で最初の引数として選択された名前にすぎません。「自分」を「私」または「x」で置き換えることもできます。 — 最大 これを行うためのより良い方法はありませんか?自分自身を参照する必要があるデフォルトの引数を10個取る関数がある場合、本当に12個のifステートメントが必要ですか?これはひどく厄介です。 — Richard J. Barbalace
6 google経由でここに到着した場合は、クラス関数の最初のパラメーターとしてselfを指定したことを確認してください。特に、関数内でそのオブジェクトの値を参照しようとした場合。 def foo(): print(self.bar) > NameError:名前 'self'が定義されていません def foo(self): print(self.bar) — エーリヒ ソース