这是情况
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(如果有的话)?
答案 0 :(得分:5)
在__init__
函数内部,没有NumRid
,但您正在尝试增加它。
如果它是一个实例变量,它应该是self.NumRid += 1
,如果它是一个类变量,它应该是Person.NumRid += 1
(或者,对于将来重命名类的代替self.__class__.NumRid += 1
)。
答案 1 :(得分:0)
当你在__init__
时,你的范围就是那个功能,而不是课程。因此NumRid
未在该范围内定义。你应该使用它的全名,Person.NumRid
来增加它。