user.py:

from story import Story

class User:
    ...
    def get_stories(self):
        story_ids = [select from database]
        return [Story.get_by_id(id) for id in story_ids]

story.py
from user import User

class Story:
    ...
    def __init__(self, id, user_id, content):
        self.id = id
        self.user = User.get_by_id(user_id)
        self.content = content

如您所见,此程序中有一个循环导入,这会导致ImportError。我了解到可以在方法定义中移动import语句,以防止发生此错误。但是我仍然想知道,在这种情况下是否有办法消除循环导入,或者是否有必要(对于一个好的设计)?

最佳答案

减轻圆度的另一种方法是更改​​导入样式。将from story import Story更改为import story,然后将该类称为story.Story。由于您仅引用方法内的类,因此在调用该方法之前,不需要访问该类,此时导入将成功完成。 (您可能必须在其中一个或两个模块中进行此更改,具体取决于首先导入哪个模块。)

但是,该设计确实有些奇怪。您的设计是如此紧密地耦合了UserStory类-两者都不能一起使用。在这种情况下,通常将它们都放在同一个模块中会更有意义。

关于python - 删除python循环导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19996053/

10-09 22:21