如何从代码规范上避免 python 模块循环引用?

发布于 2022-08-31 20:49:56 字数 195 浏览 12 评论 0

我现在会用的方法:

  1. 函数内引用
    每次在函数内引用 都感觉是因为不了解而害怕
    而且觉得有点丑
  2. 使用 “__all__” 白名单开放接口
  3. 尽量避免 import *

抛砖引玉一下,希望引出除了技巧上还有经验上的知识。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

逆光飞翔i 2022-09-07 20:49:56

怎么说呢,如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象

总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工

守护在此方 2022-09-07 20:49:56

这是代码结构设计的问题,模块依赖和类依赖一样,想清楚了,就没问题了。

初心 2022-09-07 20:49:56

补充一点,某些时候实在绕不开循环引用了(旧代码维护,补救,。。。),可以学习django.db.models.ForeignKey做法

ForeignKey用于定义一个model到另外一个model的多对一关系, 它的第一个参数可以是一个model类或者model name字符串
例如

class Country(models.Model):
    pass

class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')
    # country = models.ForeignKey(Country) 直接以Country作为参数进行关联

class Manufacturer(models.Model):
    # ...
    pass

同时接受model类型和字符串类型的考虑就是说,你可以在定义Manufacturer之前就先在Car中声明这个ForeignKey关系,在实际使用到的时候再通过model name去load对应的model。
这个方法同时也避免了两个model定义在不同的文件中的循环引用的问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文