171

なぜそのような構造

class A:
    def __init__(self, a):
        self.a = a

    def p(self, b=self.a):
        print b

エラーが発生しますNameError: name 'self' is not definedか?

4

3 に答える 3

194

デフォルトの引数値は関数定義時に評価されますがself、関数呼び出し時にのみ使用可能な引数です。したがって、引数リスト内の引数は相互に参照できません。

None引数をデフォルトに設定し、そのテストをコードに追加するのは一般的なパターンです。

def p(self, b=None):
    if b is None:
        b = self.a
    print b

2022 年更新: Python 開発者は現在、将来の Python バージョンの遅延バインド引数の既定値を検討しています。

于 2009-11-26T10:50:14.943 に答える
20

'b' を None に設定するオプションも必要な場合:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b
于 2009-11-26T17:28:10.117 に答える