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 回答