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

时间:2013-10-12 20:39:56

标签: python object python-2.7 scope

这是情况

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 * 然后     投资者(“鲍勃”) 它告诉我在赋值之前引用局部变量NumRid,NumRid += 1

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

2 个答案:

答案 0 :(得分:5)

__init__函数内部,没有NumRid,但您正在尝试增加它。

如果它是一个实例变量,它应该是self.NumRid += 1,如果它是一个类变量,它应该是Person.NumRid += 1(或者,对于将来重命名类的代替self.__class__.NumRid += 1)。

答案 1 :(得分:0)

当你在__init__时,你的范围就是那个功能,而不是课程。因此NumRid未在该范围内定义。你应该使用它的全名,Person.NumRid来增加它。