Python - 适当的继承和文件夹结构

时间:2016-04-12 12:23:34

标签: python python-3.x

我正在使用Python构建程序,并希望在执行此操作时遵循标准。我有一个运行程序的模块 main.py main.py 启动位于 program / a.py B()中的 A()对象位于 program / b.py A B 都从 program / util.py 继承 Util 。问题是 Util 还继承了解析配置文件的其他类。似乎 Util 启动两次效率低下。这会导致由 util.py 处理的数据库连接等项目进行两次maded。一次启动 Util 的最合适方法是什么?我当前的设置是

在main.py

from program.a import A
from program.b import B

class Main(object):
    def __init__(self):
        self.a = A()
        self.b = B()

在program / a.py

from .util import Util

class A(Util):
    def __init__(self):
        """DO STUFF"""

在program / b.py

from .util import Util

class B(Util):
    def __init__(self):
        """DO STUFF"""

在program / util.py

from config import Config
from db import Db  

class Util(Config):
    def __init__(self):
        #Expensive start up items such as establishing database connections
        self.db = Db(self.config)

这是正确的还是在启动它们时将Util的对象传递给A和B会更好。例如:

在main.py

from program.a import A
from program.b import B
from program.util import Util

class Main(object):
    def __init__(self):
        self.util = Util()
        self.a = A(self.util)
        self.b = B(self.util)

在program / a.py

class A(object):
    def __init__(util):
        self.util = util
        """DO STUFF"""

在program / b.py

class B(object):
    def __init__(util):
        self.util = util
        """DO STUFF"""

此外,当前文件夹结构为:

/program
    main.py
    /program
        a.py
        b.py
        util.py
        config.py
        db.py
    /config
        config.ini
    /tests
        runtests.py
    /scripts
        script.sh
    /data
        datafile.dat

此外,通过适当的约定,这个程序结构是否正确?感谢。

2 个答案:

答案 0 :(得分:0)

我建议你阅读The Hitchhiker's Python指南中的章节!在structuring your project,因为它包含一个非常好的开始结构。

答案 1 :(得分:0)

我不认为Python本身有“标准”这样做。这两种解决方案对我来说都是合理的,而且它们都不对,但两者都有其优点和缺点。

初始化对象时需要考虑几件事情。一般来说,我尽量不在类的初始化上进行昂贵的操作。这允许开发人员实例化该类而不会实际花费太多。您可以延迟加载值,以便仅在使用时初始化它们。

如果要共享连接并且您不介意减慢应用程序的启动速度,那么在启动期间创建“init”步骤可能是有意义的,然后让所有实例只使用来自模块。如果您想要的连接需要根据每个班级的作用而变化,这不是一个很好的解决方案。

至于项目结构我同意Alex。 The Hitchiker's Guide很好地告诉你如何构建你的程序。是不是鸡蛋。