我在看堆栈溢出问题,对一个类的实例进行计数吗?,我不确定为什么该解决方案有效,而使用简单加法的解决方案无效。我想这更多是关于如何存储和访问类与实例变量的问题。
这是我认为应该起作用的代码,但是会4
为每个代码生成id
:
class foo():
num = 3 # trying 3 instead of 0 or 1 to make sure the add is working
def __init__(self):
self.num += 1
self.id = self.num
f = foo()
g = foo()
print f.id # 4
print g.id # 4
该self.num +=1
语句在某种程度上起作用(正在执行添加操作,但未执行赋值操作)。
导致此分配失败的事实是什么,而itertools.count
在另一个问题的解决方案中分配成功了?
self.num += 1
基本上是指“取的值self.num
,将其递增,然后分配给” self.num
。
self
如果没有对应的实例变量,则在其上查找属性将找到类变量。但是,分配将始终写入实例变量。因此,这尝试查找实例var,失败,退回到类var,获取值,将其递增,然后分配给实例var。
链接的问题的答案起作用的原因是因为没有分配正在进行。他们next()
直接在类变量上调用,其值被更改,但未重新分配名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句