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
。由于您仅引用方法内的类,因此在调用该方法之前,不需要访问该类,此时导入将成功完成。 (您可能必须在其中一个或两个模块中进行此更改,具体取决于首先导入哪个模块。)
但是,该设计确实有些奇怪。您的设计是如此紧密地耦合了User
和Story
类-两者都不能一起使用。在这种情况下,通常将它们都放在同一个模块中会更有意义。
关于python - 删除python循环导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19996053/