[英]Can someone help me understand class variables
我试图了解 class 变量以及如何更改它们,我不明白为什么在此示例代码中,b 没有更改为 9999。我试图永久更改 b 以便任何时候从其他任何地方调用 What.b在代码中,它将打印 9999。
class Whatever():
b = 5
def __init__(self):
Whatever.b = 9999
class test():
print(Whatever.b)
Whatever()
test()
这输出:
5
test()
调用无关紧要。 在定义test
class 期间执行打印。 那是在实例化Whatever
东西之前,所以它是在 class 属性设置为 9999 之前。
class Whatever():
b = 5
def __init__(self):
Whatever.b = 9999
class test():
print(Whatever.b)
# Now the print happens (while Whatever.b is still 5)
Whatever()
# Now Whatever.b is 9999
test()
如果在实例化了Whatever()
之后的任何一点检查Whatever.b
的值,您会发现该值确实已更改为 9999。
问题是 test() 行不是使 5 打印出来的行。 我可以跑:
class Whatever():
b = 5
def __init__(self):
Whatever.b = 9999
class test():
print(Whatever.b)
Whatever()
并且它仍然会 output 5
,因为print
语句在 class test
的定义期间运行。
基本上,您的 class test
所做的就是打印Whatever.b
而不初始化 class Whatever
, Whatever.b
永远不会设置为9999
。
要获得9999
输出,您需要在 class 定义中首先初始化Whatever
内容,如下所示:
class Whatever():
b = 5
def __init__(self):
Whatever.b = 9999
class test():
Whatever()
print(Whatever.b)
Whatever()
在 test() class 上,您需要像这样实例化whatever():
myWhatever = Whatever()
print(myWhatever.b)
然后只运行 Test()
问题是test
中的打印语句发生在 class 被定义时,而不是在它被实例化时。 因为它在定义时发生,所以它发生在调用Whatever()
之前,因此b
没有被重置。
将可执行代码放在 class 中但在任何方法之外是不常见的。 将代码的行为与您在定义Test
时得到的 output 进行对比,如下所示:
class test():
def __init__(self):
print(Whatever.b)
当我进行上述更改时,output 显示 b 现在是 9999。这是因为 print 语句发生在您创建test
实例时,而不是在您定义 class 时,并且因为您在创建实例后创建了Whatever
的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.