作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有两个相关的大型 python 类,因此我将它们放在单独的文件中。假设类是 Cobra 和 Rat。
现在需要从 Cobra 的方法调用 Rat 的方法,反之亦然。为此,我需要在 Rat.py 中导入 Cobra,在 Cobra.py 中导入 Rat
这会创建一个导入循环并给出错误。无法在 Cobra 中导入 Cobra。
如何解决这个问题??
Cobra.py:
import Rat
class Cobra():
def check_prey(self, rat ):
# Some logic
rat.foo()
Rat.py:
import Cobra
class Rat():
def check_predator(self, snake ):
# some_logic ..
snake.foo()
最佳答案
如果您在 Rat
的类定义中不使用 Cobra
或反之亦然(即仅在方法内部使用),那么您实际上可以将 import 语句移动到文件的底部,此时类定义已经存在。
# Cobra.py
class Cobra:
# ...
def check_prey(self, rat):
# some logic
rat.foo()
import Rat
# Rat.py
import Cobra
class Rat:
# ...
def check_predator(self, snake):
# some_logic ..
snake.foo()
或者你可以限制导入的范围:
# Cobra.py
class Cobra:
# ...
def check_prey(self, rat):
import Rat
# some logic
rat.foo()
# Rat.py
import Cobra
class Rat:
# ...
def check_predator(self, snake):
# some_logic ..
snake.foo()
如果你不直接使用 Rat
和 Cobra
类名,那么你甚至根本不需要 import 语句:只要属性和rat
或 snake
实例中存在函数,Python 不在乎它们来自哪个类。
一般来说,没有万无一失的方法可以避免 import
循环。你能做的最好的就是重构你的代码并做我上面提到的一些事情。
关于python - 如何在 python 中打破导入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199466/
我是一名优秀的程序员,十分优秀!