繁体   English   中英

有人可以帮我理解 class 变量吗

[英]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 WhateverWhatever.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()

https://www.digitalocean.com/community/tutorials/understanding-class-and-instance-variables-in-python-3

问题是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM