2017-07-01 33 views
0

我正在使用Python(带有Pycharm)的程序,其中大约一半的代码被类和函数占用。该程序现在很长,它被写入一个单一的文件。 如果我可以将类,函数和代码的其余部分分成3个单独的文件,将节省大量时间。目前我无法做到这一点,因为循环导入,导致“从FunctionDocument导入*”语句写入主文档时不起作用。有没有简单的方法将多个文件视为单个脚本?

我知道,通告进口是不专业和不推荐。但是对于我来说没有意义,为什么简单地添加一行或两行指示Python将3个单独文件视为全部写入单独文件 - 即使它们彼此依赖。

我知道这可以通过重写代码使其非循环来解决,创建一个Viritual环境也可以解决问题。但是真的没有其他办法吗?

+0

为什么你认为循环进口是唯一的方法? –

+0

你看过[这个其他问题]的答案吗?(https://stackoverflow.com/a/40094439/3896566)?这是搜索“python循环进口”的首批结果之一,它包含各种针对和反对循环进口的意见。 (嗯,不完全是_for_,但至少不那么重要)。我链接的具体答案解释了一些可能有助于您情况的循环进口流程。 – RemedialBear

+0

您可以随时编写一个实用程序,在运行之前将这些文件粘合在一起......我也很感兴趣,如果Python可以自己做到这一点 – karlosss

回答

1

如果您有循环引用,那么您的解决方案的设计可能存在潜在的问题。我的建议是模块化你的设计。

你不应该在划分代码文件中的任意数字(例如,3),而是要创造模块文件夹思维,分离__init__.py文件初始化各个模块和分隔的文件为每个类。起初,拥有许多小文件似乎很麻烦,但很快你会看到这种方法的可维护性。

回归循环依赖关系,您可能会遇到类之间的依赖性问题。类不应该依赖于对方。依赖性应该是单向的。例如,狗可能通过扩展它来依赖动物。但动物不能参考狗类。这并不意味着它无法与之协作。例如,通过使用在Dog类中定义的方法。

减少类间依赖关系的主要工具之一是duck typing。你不需要导入一个类来使用它的方法。如果对象作为参数传递给方法,则可以在不知道其类的情况下向该对象发送消息。

This是一篇关于构建Python项目的好文章。如果遵循这种方法,您将很快发现代码清晰度和生产力提高的改进。

+0

对于很可能是[X-Y问题]的很好的建议(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。还描述[这里](http://mywiki.wooledge.org/XyProblem)。 – martineau

相关问题