gpt4 book ai didi

python - 谁能解释一下这个 python 静态类变量的情况?

转载 作者:太空狗 更新时间:2023-10-30 02:32:16 24 4
gpt4 key购买 nike

我有以下模块:

文件 a.py

class Foo(object):
x = 5

if __name__ == '__main__':
print Foo.x #5
Foo.x = 7
print Foo.x #7
b = __import__('b')
print b.Bar.x #5

文件 b.py

from a import Foo

class Bar(Foo):
pass

文件 c.py

if __name__ == '__main__':
import a
print a.Foo.x #5
a.Foo.x = 7
print a.Foo.x #7
b = __import__('b')
print b.Bar.x #7

如果我运行 a.py,我得到 5、7、5,如果我运行 b.py,我得到 5、7、7。我不确定正确答案应该是什么,但我希望两者是一致的。

最佳答案

Python 为主模块创建一个单独的命名空间,sys.modules['__main__']。您在 a.py 中测试此命名空间:

if __name__ == '__main__'

但是,当 b.py 使用 from a import Foo 时,会创建一个 命名空间,sys.modules['一个']这两个命名空间都有一个单独的 Foo 副本。

当你打印Foo.x时,你打印的是__main__.Foo.x,而b.Bar.x指的是a.Foo.x,这是一个不同的对象。

对于 c.py,您正在从 a 导入 Foo,因此 b.Barc 指的是 a.Foo

关于python - 谁能解释一下这个 python 静态类变量的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297148/

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