类属性的值不同,具体取决于它们的访问位置(Python 3)
它似乎取决于它们的访问位置,类属性没有相同的值.我不明白为什么会这样,任何理解这个或解决它的帮助都会受到欢迎.
请考虑以下.py文件: foo.py: from bar import * class Foo: someAttribute = None @classmethod def update(cls,value): cls.someAttribute = value def main(): Foo.update("some value") print(Foo.someAttribute) bar = Bar() bar.showStuff() if __name__ == '__main__': main() 和bar.py: from foo import * class Bar: def showStuff(self): print(Foo.someAttribute) 人们会期望并打算输出对于两个打印指令都是“某种值”.但我的输出如下: $python foo.py some value None 解决方法
你在内存中有两个foo模块的副本.一个叫做__main__,另一个叫做foo.这是因为您将foo作为脚本运行,然后将其存储为__main__模块.
所以当你运行python foo.py时会发生以下情况: > sys.modules [‘__ main__’]用于保存脚本命名空间. >创建sys.modules [‘bar’]以保存条形模块命名空间. > sys.modules [‘foo’]用于保存foo模块命名空间. >将名称Foo和main添加到条形命名空间 >将名称Foo,main和Bar添加到__main__命名空间 从bar中的__main__导入,或使用第三个python文件作为主脚本. 请注意,如果您使用__main__ import *,则确实存在循环导入问题.这是因为from __main__ import *不会包含from foo import *行运行时尚未执行的任何内容,请参阅上面的细分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |