class MyClass:
var = 1
one = MyClass()
two = MyClass()
print(one.var, two.var)
one.var = 2 # Adds the new instance variable by object
# ↓ Accesses the class variable by object
print(one.var, two.var)
# ↑
# Accesses the new instance variable by object
输出量: 因此,要更改类变量var,需要使用类名MyClass,如下所示:
class MyClass:
var = 1
one = MyClass()
two = MyClass()
print(one.var, two.var)
MyClass.var = 2 # Changes the class variable by the class name
print(one.var, two.var)
class MyClass:
var = 1
one = MyClass()
two = MyClass()
# Here # Here
print(MyClass.var, MyClass.var)
MyClass.var = 2 # Changes the class variable by the class name
# Here # Here
print(MyClass.var, MyClass.var)
3条答案
按热度按时间ecfsfe2w1#
它不会对所有人都发生变化,因为这样做:
one.var = 2
,创建一个与类变量同名的新示例变量,但只针对示例one
,之后,one
将首先找到它的示例变量并返回,而two
将只找到类变量并返回。要更改class变量,我建议两个选项:
1.创建一个类方法来更改类变量(我的首选项)
1.直接使用类更改它
c86crjj02#
无论是否存在同名的类属性,通过示例对属性进行赋值 * 始终 * 都会创建/更新示例变量。要更新类属性,必须使用对该类的引用。
在实践中,
type(one)
可能会返回 * 错误 * 的类来更新特定的类属性,但在实践中,当只有类的一个示例可用时,也不需要更改类属性。ctehm74n3#
one.var = 2
实际上通过对象添加新的示例变量var
,但不更改类变量var
,在添加新的示例变量var
后,one.var
访问新的示例变量var
,如下所示。* 如果存在同名类和示例变量,相同名称的示例变量优先,而相同名称的类变量在被对象访问时被忽略:输出量:
因此,要更改类变量
var
,需要使用类名MyClass
,如下所示:输出量:
基本上,您应该使用类名来访问类变量,因为无论是否存在同名示例变量,您都可以访问类变量。因此,使用类名访问类变量比使用对象访问类变量更安全,如下所示:
输出量:
我对How to access "static" class variables in Python?的回答详细解释了有关访问类变量的内容。