我正在使用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
此外,通过适当的约定,这个程序结构是否正确?感谢。
答案 0 :(得分:0)
我建议你阅读The Hitchhiker's Python指南中的章节!在structuring your project,因为它包含一个非常好的开始结构。
答案 1 :(得分:0)
我不认为Python本身有“标准”这样做。这两种解决方案对我来说都是合理的,而且它们都不对,但两者都有其优点和缺点。
初始化对象时需要考虑几件事情。一般来说,我尽量不在类的初始化上进行昂贵的操作。这允许开发人员实例化该类而不会实际花费太多。您可以延迟加载值,以便仅在使用时初始化它们。
如果要共享连接并且您不介意减慢应用程序的启动速度,那么在启动期间创建“init”步骤可能是有意义的,然后让所有实例只使用来自模块。如果您想要的连接需要根据每个班级的作用而变化,这不是一个很好的解决方案。
至于项目结构我同意Alex。 The Hitchiker's Guide很好地告诉你如何构建你的程序。是不是鸡蛋。