我对Python中的整个交叉导入非常困惑。我有一个包,其中包含一个主模块main.py和几个子模块b.py和c.py,每个模块中分别有一个类,即class main
、class b
和class 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是否会非常低效甚至影响性能
非常感谢
Python不是Java,它既不需要也不建议使用“每个类一个模块”的方案——实际上恰恰相反——而且不支持循环依赖性——正如您已经发现的那样。如果有两个类(或函数或其他任何东西)相互依赖,那么它们显然应该生活在同一个模块中(这就是“低耦合,高内聚”规则所要求的)
在函数或方法体中导入被认为是不好的做法,确实会在每次调用时增加一些开销(虽然没有那么多开销,但在一个巨大的数据集上的紧密循环中,它会产生很大的影响),而且实际上应该只用作最后的临时Q&;哈克
在不知道代码实际是什么样子的情况下回答这个问题是不可能的,但是如果3(3!)类已经足够达到您的“太多行”限制,那么很可能您的类做得太多了,并且将受益于重构成不同的类(以及可能的普通函数-python并不要求所有代码都存在于类中),其中一些可能会被提取到其他实用程序模块中。“单一责任”原则是一个很好的指导。。。您还可能有一些代码可以以更简洁(但仍然可读)的方式重写—看起来您对Python没有太多经验,很可能您没有充分利用语言(和stdlib)的功能
现在,有时即使有最好的设计和编码,您仍然会得到相当大的模块,因为域本身就很复杂,需要相当多的代码。。。这是生活的一个事实,你必须学会接受,抱歉
哦,是的:这一切也取决于你的资格“太大,你喜欢”,当然-记录在案,1000+行模块是相当普通的
相关问题 更多 >
编程相关推荐