交叉导入模块的导入错误

2024-09-30 03:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python中的整个交叉导入非常困惑。我有一个包,其中包含一个主模块main.py和几个子模块b.pyc.py,每个模块中分别有一个类,即class mainclass bclass c

\uuu init\uuuuuuuuuuuy.py中:

from .main import main
from .b import b
from .c import c

main.py中:

from .b import b 
from .c import c
class main:

b.py中:

from .main import main 
class b:

将引发严重的恐怖,为了解决它,我们可以:

class b:
    def __init__(self):
        from .main import main

这样就可以了。但我不太明白为什么。如果在b.py中有多个类或方法,该怎么办。在每种方法中使用import main是否会非常低效甚至影响性能

非常感谢


Tags: 模块方法frompyimportselfinitmain
1条回答
网友
1楼 · 发布于 2024-09-30 03:22:46

Python不是Java,它既不需要也不建议使用“每个类一个模块”的方案——实际上恰恰相反——而且不支持循环依赖性——正如您已经发现的那样。如果有两个类(或函数或其他任何东西)相互依赖,那么它们显然应该生活在同一个模块中(这就是“低耦合,高内聚”规则所要求的)

在函数或方法体中导入被认为是不好的做法,确实会在每次调用时增加一些开销(虽然没有那么多开销,但在一个巨大的数据集上的紧密循环中,它会产生很大的影响),而且实际上应该只用作最后的临时Q&;哈克

what would you recommend to make the module less cluttered as putting them in one module results in a very large file with too many lines (at least for my liking)

在不知道代码实际是什么样子的情况下回答这个问题是不可能的,但是如果3(3!)类已经足够达到您的“太多行”限制,那么很可能您的类做得太多了,并且将受益于重构成不同的类(以及可能的普通函数-python并不要求所有代码都存在于类中),其中一些可能会被提取到其他实用程序模块中。“单一责任”原则是一个很好的指导。。。您还可能有一些代码可以以更简洁(但仍然可读)的方式重写—看起来您对Python没有太多经验,很可能您没有充分利用语言(和stdlib)的功能

现在,有时即使有最好的设计和编码,您仍然会得到相当大的模块,因为域本身就很复杂,需要相当多的代码。。。这是生活的一个事实,你必须学会接受,抱歉

哦,是的:这一切也取决于你的资格“太大,你喜欢”,当然-记录在案,1000+行模块是相当普通的

相关问题 更多 >

    热门问题