v7
  • 199

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

我现在会用的方法:

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

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

阅读 6.3k
评论
    3 个回答

    补充一点,某些时候实在绕不开循环引用了(旧代码维护,补救,。。。),可以学习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定义在不同的文件中的循环引用的问题

    评论 赞赏