【发布时间】:2013-10-20 18:20:21
【问题描述】:
情况是这样的
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(如果有的话)?
【问题讨论】:
-
UnboundLocal问题在这里每周被问两次,使用搜索和按分数排序应该会引导您进行一些详细的解释(简而言之:您不能分配给周围定义的变量范围,至少不是这样)。不过还有一件事;rid = NumRid不会做你想让它做的事情,因为默认参数是在编译时评估的,因此rid将始终为 0。只需直接引用类变量并删除冗余参数... -
好吧,我想在每次创建新投资者时增加 rid,并将其指定为默认值,同时还可以选择传入不同的值:我检查了行为,看起来将它们全部初始化为 1,据我了解,这就是您所说的 0
-
是的,你是对的,我之前评论中的
0应该是1。如果您希望能够传入不同的值,请使用哨兵值作为默认值 - 通常您会选择None,除非这是一个有效值。然后在方法内部测试参数是否为哨兵,如果是则取当前的NumRid,否则取参数值。
标签: python object python-2.7 scope