gpt4 book ai didi

python - 如何在 Python 的类中使用静态变量

转载 作者:行者123 更新时间:2023-11-28 20:59:21 26 4
gpt4 key购买 nike

class Cls:
counter = 0
def __init__(self, name):
self.name = name
self.counter += 1
def count(self):
return self.counter

我正在学习 python,我想要的是一个静态计数器,用于计算类被实例化的次数,但每次我创建一个实例时,counter 都会重新创建并且 count() 函数总是返回 1。我想要在 Java 中看起来像这样的东西

public class Cls {
private static int counter = 0;
private String name;
public Cls(String name) {
this.name = name;
counter ++;
}
public static int count(){
return counter;
}
}

最佳答案

有两种方法可以访问类属性:可以直接在类上访问它,也可以通过 self 读取它(但不能重新绑定(bind))。如果已经在实例上直接设置了一个值,那么通过 self 访问类属性将不起作用,因此您通常会尝试使用该类来访问类属性。

class Cls:
counter = 0
def __init__(self, name):
self.name = name
Cls.counter += 1
def count(self):
return Cls.counter

当您编写 self.counter += 1 时,这是 self.counter = self.counter + 1 的简写,与通过 进行的任何其他绑定(bind)一样self 它设置一个实例属性。

如果您想要实例属性的默认值,这会很有用,您可以将它们设置为类属性,然后在需要不同值的实例中更新它们,但为了避免混淆,您可能希望避免使用 self 在访问类属性时完全没有。

你也可以考虑把count方法做成一个类方法,把增量移到另一个方法中:

@classmethod
def increment(cls):
cls.counter += 1

@classmethod
def count(cls):
return cls.counter

如果你这样做,那么每个子类都会有自己独立的计数器。这可能是也可能不是你想要的。这里的 cls 参数是实际实例化的类,如果您可以使用整个类层次结构,或者甚至只是一个基类 CountsInstances ,这将很有用,您可以在其中放置它编码一次,并在多个独立的计数器中重复使用。

@staticmethod 装饰每个函数会给你一些接近 Java 代码的东西:

class Cls:
counter = 0
def __init__(self, name):
self.name = name
self.increment()

@staticmethod
def increment():
Cls.counter += 1

@staticmethod
def count():
return Cls.counter

关于python - 如何在 Python 的类中使用静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49736753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com