gpt4 book ai didi

python - 在 Python 中处理类依赖

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:37 24 4
gpt4 key购买 nike

我的 Django 项目中安装了两个应用程序...

Contacts Package
Models.py
- class Contact

Homes Package
Models.py
- class House

House 有一个名为 get_contact 的模型方法,在这个方法中我导入联系人和过滤器等(不重要)

我的问题:House 现在依赖于 Contacts,这意味着如果没有 Contact 应用程序,我将无法再安装 House 应用程序。尽管这所房子应该可以在没有联系人的情况下存在。在 Python 中,(在 Django 框架的上下文中)你们 Python 人如何处理这个问题?

有没有更好的方法?

最佳答案

如果 HouseContacts 包的使用仅限于单个方法,那么您将导入放在方法中并捕获异常:

def foo(self):
try:
from Contacts.Models import Contact
except ImportError:
return
... use Contact here

或者,您可以将导入放在模块的顶部,但在它不可用的情况下将其设置为 None:

try:
from Contacts.Models import Contact
except ImportError:
Contact = None


...
if Contact is not None:
... use Contact ...

如果您想走更纯粹的 OOP 路线,那么您可以使用 Zope3 适配器,但这意味着您已经将对一个包的依赖性换成了对一组其他包的依赖性。对于您所描述的问题,这可能有点过头了,但如果您想调查此解决方案,请参阅 this blog post .

我认为如果您尝试这样做,您将遇到的真正问题是您必须定义一个接口(interface),例如可以为您的 House 类获取的 IContactProvider 接口(interface)。该界面必须存在于某个地方,如果那个地方是 Contacts 包,您最终仍然需要安装该包。如果您需要某种通用的 IContactProvider 和几个特定的​​实现,那么这可能是处理该问题的好方法。

关于python - 在 Python 中处理类依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16274888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com