5

状況はこちら

class Person(object):
    NumRid = 1
    def __init__(self, name, rid = NumRid):
        self.name = name
        self.rid = rid
        NumRid += 1

class Investor(Person):
    pass

次に、インタラクティブな python セッションに入り、入力してfrom file import * から Investor('Bob') を入力すると、割り当て前にローカル変数 NumRid が参照されていることがわかりますNumRid += 1

グーグルでわかる限り、NumRidはクラスのローカル名前空間にあり、クラス関数からアクセスできるはずです....それでどうしたのですか?両方をグローバルに宣言する必要がありますか? または、クラスの名前空間に NumRid がある場合にそれを検索するために入力できる魔法の言葉はありますか?

4

2 に答える 2

7

__init__関数内には はNumRidありませんが、インクリメントしようとしています。

それがself.NumRid += 1インスタンス変数である場合、またはPerson.NumRid += 1クラス変数である場合 (または、クラスの名前を変更することに対する将来の証明: self.__class__.NumRid += 1) のいずれかである必要があります。

于 2013-10-12T20:44:46.410 に答える
0

スコープ内にいるとき__init__は、クラスではなくその関数です。したがってNumRid、そのスコープでは定義されていません。Person.NumRidインクリメントするには、完全な名前を使用する必要があります。

于 2013-10-12T20:46:51.803 に答える