Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,是否可以从构造函数内部递增/访问类变量?_Python_Python 2.7 - Fatal编程技术网

在Python中,是否可以从构造函数内部递增/访问类变量?

在Python中,是否可以从构造函数内部递增/访问类变量?,python,python-2.7,Python,Python 2.7,每次实例化一个类时,我都希望通过计数器跟踪。我试图通过从类的构造函数ala中递增一个定义为类变量的计数器来实现这一点: class Cl: cntr = 0 def __init__(self): cntr += 1 然而,当我实例化该类时,我得到了一个“UnboundLocalError:赋值前引用的局部变量'cntr”,我假设这是因为构造函数将其视为局部变量。在Python 2.7中,如何从方法或构造函数内部引用类变量?您只需通过类调用变量即可: class Cl:

每次实例化一个类时,我都希望通过计数器跟踪。我试图通过从类的构造函数ala中递增一个定义为类变量的计数器来实现这一点:

class Cl:
   cntr = 0
   def __init__(self):
      cntr += 1

然而,当我实例化该类时,我得到了一个“UnboundLocalError:赋值前引用的局部变量'cntr”,我假设这是因为构造函数将其视为局部变量。在Python 2.7中,如何从方法或构造函数内部引用类变量?

您只需通过类调用变量即可:

class Cl:
    cntr = 0
    def __init__(self):
        Cl.cntr += 1  # <---Like this


print(Cl().cntr)  # prints 1
print(Cl().cntr)  # prints 2
print(Cl().cntr)  # prints 3
Cl类:
cntr=0
定义初始化(自):

Cl.cntr+=1#您只需通过类调用变量:

class Cl:
    cntr = 0
    def __init__(self):
        Cl.cntr += 1  # <---Like this


print(Cl().cntr)  # prints 1
print(Cl().cntr)  # prints 2
print(Cl().cntr)  # prints 3
Cl类:
cntr=0
定义初始化(自):

Cl.cntr+=1#不增加类变量的@Stack的可能副本,它会创建一个隐藏类变量的实例变量。当然可以
cntr
此处被编译器标记为local,因为您分配给它,但即使您没有分配,它也会先检查局部变量,然后检查全局变量,并且永远不会检查类名称空间。在类本身中这样做可能是重复的,这是一个糟糕的设计(跟踪实例不是他的责任)。在元类或其他外部注册表中执行此操作。如果@Stack的副本不增加类变量,则会创建一个隐藏类变量的实例变量。当然可以
cntr
此处被编译器标记为local,因为您分配给它,但即使您没有分配,它也会先检查局部变量,然后检查全局变量,并且永远不会检查类名称空间。在类本身中这样做可能是重复的,这是一个糟糕的设计(跟踪实例不是他的责任)。在元类或其他外部注册表中执行此操作。不确定
classmethod
是否会起作用尽管在Python2上,请确保使用新样式的类。不确定
classmethod
是否会起作用