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语句以防止出现此错误.但是我仍然想知道,在这种情况下有没有办法去除循环导入,或者,是否有必要(对于一个好的设计)?
减少循环的另一种方法是改变导入样式。更改from story import Story为import story,然后将该类称为story.Story。由于您只引用方法内的类,因此在调用该方法之前不需要访问该类,此时导入将成功完成。(您可能需要在一个或两个模块中进行此更改,具体取决于首先导入哪个模块。)
然而,这个设计确实看起来有些奇怪。您的设计使得User和Story类紧密耦合——两者都不能脱离另一个而使用。在这种情况下,将它们放在同一个模块中通常更有意义。
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |