gx19860411 发表于 2022-10-12 17:21

问个python循环引用的问题

A.py 里有 import c.1,c.2
B.py 里也有 import c.1,c.2
当我在A里 import B 时就报错说我循环引用
但A和B又确实需要c.1,c.2
这该怎么写呢?

gx19860411 发表于 2022-10-12 17:24

以及有什么快速查看py间引用结构的工具呢?

—— 来自 Xiaomi M2011K2C, Android 12上的 S1Next-鹅版 v2.5.4

我是囧人 发表于 2022-10-12 17:49

from b import XXX

赤色彗星SEXY 发表于 2022-10-12 18:41

惰性加载

lvseqiji 发表于 2022-10-12 18:44

nessaj 发表于 2022-10-12 20:24

gx19860411 发表于 2022-10-12 20:58

本帖最后由 gx19860411 于 2022-10-12 20:59 编辑

nessaj 发表于 2022-10-12 20:24
你在A.py里import B之后已经可以使用B里的所有object和module了,包括B import的那些
所以你在A里并不需要i ...

可现在是说B里面最后一行 c.c1=重复引用了…可在上面一个函数里 用c.c1就正常

—— 来自 Xiaomi M2011K2C, Android 12上的 S1Next-鹅版 v2.5.4

nessaj 发表于 2022-10-12 21:04

Tring 发表于 2022-10-12 21:04

本帖最后由 Tring 于 2022-10-12 21:09 编辑

gx19860411 发表于 2022-10-12 20:58
可现在是说B里面最后一行 c.c1=重复引用了…可在上面一个函数里 用c.c1就正常

—— 来自 Xiaomi M2011 ...
python下,给模块内的变量赋值,是一个非常非常纠结的问题。
甚至在不同cpython的小版本下,这个实现都是不同,细节也是不一样的。

因此极端不推荐这样使用,绝对不要给模块里的变量赋值。

你如果真的到了不得不用某一个静态变量传递内容的时候,也应该用某一个静态的dict或者list或者对象这类mutable变量,对其成员赋值,而非对变量本身赋值。
不过最推荐的做法还是用参数在模块之间传递信息。
页: [1]
查看完整版本: 问个python循环引用的问题