【发布时间】:2018-01-17 20:55:06
【问题描述】:
我想在每次实例化类时通过计数器进行跟踪。我试图通过从类的构造函数 ala 中增加一个定义为类变量的计数器来做到这一点:
class Cl:
cntr = 0
def __init__(self):
cntr += 1
但是,当我实例化该类时,我得到一个“UnboundLocalError: local variable 'cntr' referenced before assignment”我假设这是因为构造函数将其视为局部变量。如何在 Python 2.7 的方法或构造函数中引用类变量?
【问题讨论】:
-
@Stack 不会增加类变量,它会创建一个实例变量来隐藏类变量。
-
是的,当然。
cntr这里被编译器标记为本地,因为你分配给它,但即使你没有,它会先检查本地然后全局,从不检查类命名空间。 -
在类本身中这样做是一个糟糕的设计(跟踪实例不是他的责任)。在元类或其他一些外部注册表中执行此操作。
标签: python python-2.7