在类内部赋值之前引用的局部变量

Zac*_*ach 4 python scope object python-2.7

这是情况

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

class Investor(Person):
    pass
Run Code Online (Sandbox Code Playgroud)

然后我进入交互式python会话,输入然后输入from file import * Investor('Bob'),它告诉我在赋值之前引用局部变量NumRid,at NumRid += 1.

据我可以通过谷歌搜索来说,NumRid应该在类的本地命名空间中,并且可以从类函数中访问....所以这有什么用呢?我是否需要宣布两者都是全球性的; 或者是否有一个可以输入的神奇单词,以便在类命名空间中查找NumRid(如果有的话)?

Eth*_*man 6

__init__函数内部,没有NumRid,但是你试图增加它.

它应该self.NumRid += 1是一个实例变量,或者Person.NumRid += 1它是一个类变量(或者,以防止重命名类的未来 - self.__class__.NumRid += 1).