当前位置: 首页 > 面试题库 >

如何避免Python中的循环导入?

高英彦
2023-03-14
问题内容

我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。

有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。

更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需要做事。这类似于集合和冻结集合或列表和元组。

我可以将两个类定义放在同一模块中。还有其他建议吗?

一个玩具示例将是类A,其属性为列表,而类B的属性为元组。然后,类A具有一个方法,该方法采用类B的一个实例并返回类A的一个实例(通过将元组转换为列表),类似地,类B具有一个方法,该方法采用类A的实例并返回类B的一个实例。
(通过将列表转换为元组)。


问题答案:

仅导入模块,不从模块导入:

考虑a.py

import b

class A:
    def bar(self):
        return b.B()

b.py

import a

class B:
    def bar(self):
        return a.A()

这工作得很好。



 类似资料:
  • 本文向大家介绍关于Python如何避免循环导入问题详解,包括了关于Python如何避免循环导入问题详解的使用技巧和注意事项,需要的朋友参考一下 前言 Python 中使用package时,出现循环导入问题十分常见,我们创建如下package来说明这个问题: 其中, __init__.py 将pkg指定为一个Python package module_a.py中定义了一个action_a()函数,该

  • 从我的main开始,我将启动两个线程,称为producer和consumer。两者都包含循环。生产者循环是UDP服务器,因此不需要Hibernate。我的问题出在消费者方面。使用者循环将对象从链接队列中移除,并将其传递给一个函数进行进一步处理。根据研究,在循环中使用线程Hibernate不是一个好的实践,因为有时O/S在设定时间结束时不会释放。如果我删除线程Hibernate,当应用程序是理想的,

  • 考虑这两个模块(在同一个文件夹中): 首先是人。派克 然后pet.py 上面的代码将无法工作,因为循环依赖。你会得到一个错误: 让它工作的一些方法: 将类Person和Pet的定义保存在同一个文件中 e、 g.只要有: 到目前为止,我在列出的所有选项中看到了一些缺点。 还有别的办法吗?一个允许我 将类拆分为不同的文件 或者:有没有很好的理由去遵循我已经列出的解决方案之一?

  • 问题内容: 如果两个模块相互导入会怎样? 为了概括这个问题,Python中的循环导入又如何呢? 问题答案: 导入确实非常简单。只要记住以下几点: 和是可执行语句。它们在运行的程序到达该行时执行。 如果模块不在中,则导入将在中创建新的模块条目,然后在模块中执行代码。在执行完成之前,它不会将控制权返回给调用模块。 如果中确实存在一个模块,则无论导入是否完成执行,导入都会简单地返回该模块。这就是循环导入

  • 问题内容: app / init .py: app / models.py: 我真的不喜欢子模块依赖于其父模块。也可以避免全局包变量吗?我想要更多面向对象的解决方案。 应用程序的一种替代方法是使用我认为的“蓝图”,但是随后我松开了路线装饰器。同样,对于使用SQLAlchemy的数据库也无法做到这一点(或者可以吗?)。 问题答案: 看一下这个项目:https : //github.com/slori

  • 问题内容: 我只有一个班很多实例。每个实例都是其他几个实例的观察者。同样,每个实例也可以通过几个其他实例观察到。 如何避免在观察者中调用update()的无限循环? 问题答案: 您正在寻找一种检测循环的图遍历算法。一种简单的方法(仅在单线程方案中有效)是保持全局/静态计数器,以使每个顶级调用都获得唯一的标识符。然后,每个观察者都跟踪是否已经使用给定的标识符(ID)处理了更新,并且在这种情况下将其忽