gpt4 book ai didi

python - 从包导入时类属性会重置

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:45 24 4
gpt4 key购买 nike

我有一个项目,其组织方式类似于

project/
__init__.py
builder.py
component/
__init__.py

builder.py 中,我有一个名为 Builder 的类,它具有多个类属性以实现 Borg 模式。当我尝试在 component/__init__.py 中导入 Builder 并更改类属性时,问题就出现了。看起来,当函数返回时,我对包中的类属性所做的任何更改都会被撤消。

更新:这是正在发生的事情的一个简单示例。

builder.py

class Builder(object):
attribute = True

import component

print Builder.attribute

组件/___init___.py

from project.builder import Builder

Builder.attribute = False

输出:

False
True

从打印的两行来看,我猜测 builder.py 中的代码被执行了两次,这将 attribute 的值重置为 True .

最佳答案

您拥有的是循环导入:构建器导入组件,组件导入构建器。

当构建器导入组件时,构建器尚未完全构建。然后组件导入构建器,它执行构建器模块的其余部分(全部在导入组件之后)。稍后,当加载组件时,构建器会再次继续处理导入组件之后的所有内容。

请注意,如果先加载组件,行为会有所不同!

基本上,您不应该进行循环导入。尝试以其他方式组织代码。

关于python - 从包导入时类属性会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216908/

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