简单
-
Foo.var 更改类状态。
-
self.var 更改对象状态。
class Foo():
var = None
def __init__(self):
Foo.var = 1
class Bar():
var = None
def __init__(self):
self.var = 1
print('Foo before', Foo.var)
print('Bar before', Bar.var)
foo = Foo()
bar = Bar()
print('foo', foo.var)
print('bar', bar.var)
print('Foo after', Foo.var)
print('Bar after', Bar.var)
Foo.var = 2
Bar.var = 2
print('foo after class changed', foo.var)
print('bar after class changed', bar.var)
输出:
Foo before None
Bar before None
foo 1
bar 1
Foo after 1
Bar after None
foo after class changed 2
bar after class changed 1
关于第二个问题:
示例 1 是静态变量还是将变量声明错误地用作静态变量?
vars 都是 static (or class) variables。您可以在不创建实例的情况下调用它们。 (Foo.var, Bar.var)
class Foo():
class_variable = 'c'
def __init__(self):
self.instance_variable = 'i'
print('Class variable of class', Foo.class_variable)
try:
print(Foo.instance_variable)
except Exception as e:
print('This error happens when we call instance variable without creating instance')
print(e)
instance = Foo()
print('Class variable of instance', instance.class_variable)
print('Instance variable of instance', instance.instance_variable)
Class variable of class c
This error happens when we call instance variable without creating instance
type object 'Foo' has no attribute 'instance_variable'
Class variable of instance c
Instance variable of instance i