在__init__中更改类属性

用户名

我在看堆栈溢出问题,对一个类的实例进行计数吗?,我不确定为什么该解决方案有效,而使用简单加法的解决方案无效。我想这更多是关于如何存储和访问类与实例变量的问题。

这是我认为应该起作用的代码,但是会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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章