无法在__init__函数Python中增加全局变量



我正在尝试增加一个名为";lastIdentification";在__init__和我做不到。

class Agent:
lastIdentify = 0
def __init__(self,name,tel,age,gender='ND'):
global lastIdentify
lastIdentify += 1
self._identify = lastIdentify

我还试图删除全球声明,但什么也没发生。

我有以下错误:文件"//A/Agent.py";,第10行,在initlastIdentity+=1中名称错误:名称"lastIdentification"未定义

谢谢!

因此,正如Barmar所想,您心中有一个类变量。

这里棘手的部分是:Python有可变数据(列表、字典、集合…(和不可变数据(int、float、string…(

当您修改类级别的不可变变量时,您可以将其复制并绑定到实例的作用域/命名空间。这就是badlastIdentify上正在发生的事情。

另一方面,如果你开始改变类范围的可变属性,例如列表,你会发现你正在修改类级别的变量,即你的列表会变得更大,即使这不是你想要的。

而且,在您的原始代码中,global lastIdentify又是一个东西:它以前不存在,不能递增,并且与您的类没有关系。一般来说,global作为Python中的一个关键字有点代码味,它通常以不同的方式处理得更好。而且,不,我并不是一个对全球和单身人士的糟糕感到虔诚的人,尤其是在使用global的时候。

class Agent:
lastIdentify = 0
badlastIdentify = 0
def __init__(self,name,tel,age,gender='ND'):
# you are operating on the class namespace, 
#not on an instance-specific variable
self.__class__.lastIdentify += 1
#this doesnt "mutate" the class-variable
#it binds a new copy of it, +1, to this instance
self.badlastIdentify += 1
agent99 = Agent(1,2,3,4)
agent007 = Agent(1,2,3,4)
print(f"{agent99.badlastIdentify=} , {agent99.lastIdentify=} ")
print(f"{agent007.badlastIdentify=} , {agent007.lastIdentify=} " )
print(f"{Agent.badlastIdentify=}  {Agent.lastIdentify=} ")

输出:

agent99.badlastIdentify=1 , agent99.lastIdentify=2
agent007.badlastIdentify=1 , agent007.lastIdentify=2
Agent.badlastIdentify=0  Agent.lastIdentify=2

另请参阅:

Python名称空间是关于什么的
"最小惊奇";和可变默认自变量

相关内容

  • 没有找到相关文章

最新更新