Python类,数据结构和适当的架构

时间:2016-07-28 12:10:40

标签: python import architecture

我正在编写一个程序,它从不同的服务中请求用户信息,并以某种方式将它们组合在一起。管理东西并做一些松弛的互动。 我所有的python项目都有一定的问题。导入开始变得递归并且处理数据变得烦人。

我刚刚遇到的一个问题的简单示例可以通过这个简单的例子来展示。我有一个主模块(这里是A),它创建了主要对象(单例)。 这些对象需要相互调用函数,因此我使用main作为连接器。在这个给定的例子中,我不明白何时创建B,它从A请求的列表是(None)NoneType。 getter函数不一定是我的方式,但它在另一种情况下有所帮助。你有任何提示,读到点,如何构建中型python程序。谢谢!

import B

some_list = None
b = None

def get_list():
    return some_list

if __name__ == "__main__":
    some_list = [1,2,3]
    b = B.B()
    print b.my_list

模块B

from A import get_list

class B:
    def __init__(self):
        self.my_list = get_list().map(lambda v : v * 2) # CRASH HERE!

1 个答案:

答案 0 :(得分:3)

您现在拥有主模块的两个副本,每个副本都是sys.modules中的单独条目:

  1. 从命令行开始的初始Python脚本始终称为__main__

  2. 您将A.py文件导入为A模块。这与__main__模块分开

  3. 是的,相同的源文件提供了两个模块,但Python认为它们是不同的。

    因此,第二个副本没有执行if __name__ == '__main__':块,因为__name__变量设置为'A'。因此,A.some_listA.b仍设置为None;您想要__main__.some_list__main__.b

    不要将代码放在主要入口点,其他模块需要导入才能访问。 传递此类依赖项,或者让它们由主模块和其他模块都可以导入的单独模块管理。

    例如,您可以将函数传递给B()类:

    b = B.B(get_list)