python - 组织一个必须共享内部状态的大型 Python 项目?

标签 python project-management code-organization

我目前正在移植一个相当大的 Perl,问题是它使用了一些 Perl 技巧来使其代码可供使用。我对 Python 做了同样的事情,使代码库成为一个用于导入的大模块。我已经牢牢掌握了 Python 很长一段时间,但我没有使用 Python 编写的大型项目的经验,这些项目需要在维护内部状态的同时访问自身的其他部分。

我还没有尝试过简单地在一行中导入整个内容(import core),但我知道我目前没有以最好的方式做事。下面是主脚本中的一个示例,它使一切都开始运转:

self.Benchmark = Benchmark(self)

self.Exceptions = Exceptions

self.Settings = Settings(self)
self.Cache = Cache(self)

self.Deal = Deal(self)
self.Utils = Utils(self)
self.FileParsers = FileParsers(self)
self.Network = Network(self)
self.Plugins = Plugins(self)
self.Misc = Misc(self)

有效,但我对此不满意。现在,主类脚本导入core模块的每个部分,并创建所包含类的实例,将其自身作为参数传递给这些类中的__init__。就像这样:

class FileParsers:
    def __init__(self, parent):
        self.parent = parent

现在该类中的代码可以通过父类访问代码库的整个其余部分。

self.parent.Settings.loadSysConfig()

所以我的问题是:考虑到上述情况,重新组织项目和重构代码以使其保留当前访问其他所有内容的能力的最佳方法是什么?代码非常不重要,所以我并不担心内部数据完整性,我只是不喜欢以如此丑陋的方式遍历父类。这些长链也会减慢代码速度。

编辑:哎呀,忘记了这些:两个项目的 SVN 存储库的链接。我的是here ,我要移植的项目是here .

最佳答案

如果没有实际看到代码,真的很难判断,但您可能应该考虑在该模块中导入每个模块使用的项目。有一长串导入列表并不罕见 - 这是我自己网站上的一个示例:

# standard
import inspect
import linecache
import neo_cgi
import neo_cs
import neo_util
import os
import random
import sys
import time
from _apache import SERVER_RETURN
from mod_python import apache
from mod_python import util
from mod_python.util import FieldStorage
from os.path import dirname, isfile, join, splitext

# set up path
pydir = dirname(__file__)
if pydir not in sys.path:
    sys.path.append(pydir)

# things I wrote
import auth
import handlers.accounts, handlers.publish, handlers.standard
import logger
import markup
import programs
import summarize
from auth import check_auth
from common import hdf_iterate, load_hdf_cgi_vars, load_hdf_common_vars
from common import hdf_insert_value, hdf_insert_list, hdf_insert_dict
from handlers import chain, farm, opt
from handlers import URIPrefixFilter
from handlers.standard import TabBarHandler

而且我确信许多较大的模块具有更长的列表。

在您的情况下,可能有一个带有单例对象的Settings模块(或将设置作为模块属性)并执行

import Settings

或者其他什么。

关于python - 组织一个必须共享内部状态的大型 Python 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/739311/

相关文章:

Python正则表达式查找字符串

python - 语法错误 : non-default argument follows default argument

Python方式进行crc32b

project-management - 有经验的程序员需要多长时间才能精通新技术/语言?

java - 我如何在java中组织这个多边形列表以便它们易于使用?

c++ - 结构原型(prototype)

python - 在 Windows 上的 CygWin 下调用 python 挂起

project-management - 什么时候应该使用领域特定语言?

project-management - Scrum中的故事估算

java - 'mix class and interfaces in the same package' 是不好的做法吗?