删除python循环导入

won*_*ng2 8 python import circular-dependency

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]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*arn 1

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

然而,这个设计确实看起来有些奇怪。您的设计使得UserStory类紧密耦合——两者都不能脱离另一个而使用。在这种情况下,将它们放在同一个模块中通常更有意义。