なぜ、このような構造NameError:名 '自己' が
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
が定義されていませんが、エラーNameError: name 'self' is not defined
を与えますか?
なぜ、このような構造NameError:名 '自己' が
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
が定義されていませんが、エラーNameError: name 'self' is not defined
を与えますか?
デフォルトの引数値は関数define-timeで評価されますが、self
は関数呼び出し時にのみ使用できる引数です。したがって、引数リストの引数は互いに参照できません。
それはNone
に引数をデフォルトとコードでそのためのテストを追加するための一般的なパターンです:あなたもなしに「b」を設定するオプションを持っているしたい場合のために
def p(self, b=None):
if b is None:
b = self.a
print b
:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
何があまりにも複雑であるか分かりません。 bのすべての値を保持する独自のソリューションで自由にチャイムしてください。 – Andrew
ここでGoogleに到着した場合は、クラス機能の最初のパラメータとしてselfを指定していることを確認してください。特に、関数内でそのオブジェクトの値を参照しようとするとします。
def foo():
print(self.bar)
> NameError:名前 '自己'
def foo(self):
print(self.bar)
> "あなたはNameErrorを処分したおめでとう!" と定義されていません。
私は上記があまりにもきれいではないと思うが(私は事がうまく動作するルビーから来ている)、実際は回避策として機能する。 Pythonがパラメータリストで自己を利用できなくすることを選択したのはまだおかしなことです。 – shevy