Python,将模块拆分成几个文件

时间:2016-01-17 23:18:12

标签: python

我有一个可以描述为的模块 蟒

class Symbol():
    def __init__(data):
        self.data = data
        pass
    def __add__(self,other):
        return Add(self,other)

class Integer(Symbol):
    pass

class Add(Symbol):
    def __init__(a,b):
        self.data = [a,b]

我想将它分成三个文件,即symbol.py,integer.py和add.py;当然会有更多关于这些类的细节,所以将它们放在一个文件中是荒谬的。

出于某种原因,进口似乎从不起作用,虽然它甚至没有抱怨循环依赖,有人可以给我一些例子吗?

1 个答案:

答案 0 :(得分:1)

您的循环依赖情况不可解决,因为Symbol在定义时不依赖于Add,仅在调用__add__方法时。有两种好方法可以解决它。

第一个是让模块Symbol在顶级导入Add,但只在__add__方法本身内执行。例如,如果您的模块以类(仅小写)命名,那么您将在symbol.py中使用它:

class Symbol():
    # ...

    def __add__(self,other):
        from add import Add
        return Add(self,other)

另一种方法是将Add全局导入symbol模块,但在确定Symbol类后执行。这样,当add模块导回symbol时,它总是能够看到Symbol类的定义,即使模块的其余部分未完成加载。

class Symbol():
    # same as in your current code

from add import Add

如果你采用第二种方法并且Symbol类导入文件顶部的其他内容(通常放置import语句),你可能想在该空间中添加注释大约Add稍后导入(以及为什么)。