当设计需要其他python库的python库时,一般的方法是什么?

当设计需要其他python库的python库时,一般的方法是什么?,python,Python,我已经用Python2.7和PySide创建了一个应用程序。由于这个应用程序相当大,我不得不创建许多自定义库。这些库有时需要从其他自定义库调用方法,因此我让库中的类继承其他库的类。然而,这有时会导致继承解决问题,导致我不得不创建冗余和非优雅的解决方案作为解决方法 现在,我正在从头重写应用程序,我希望确保我设计的自定义库不依赖于继承。通常最好的方法是什么 我想我应该把和一起使用: from libs import envlib from libs import diskoplib from lib

我已经用Python2.7和PySide创建了一个应用程序。由于这个应用程序相当大,我不得不创建许多自定义库。这些库有时需要从其他自定义库调用方法,因此我让库中的类继承其他库的类。然而,这有时会导致继承解决问题,导致我不得不创建冗余和非优雅的解决方案作为解决方法

现在,我正在从头重写应用程序,我希望确保我设计的自定义库不依赖于继承。通常最好的方法是什么

我想我应该把
一起使用:

from libs import envlib
from libs import diskoplib
from libs import dblib

class Something(object):
    def __init__(self, parent=None):
        super(Something, self).__init__()

    def do_something(self):
        names = None
        filepath = None
        id = None
        with envlib.Query() as e,
             diskoplib.Query() as d,
             dblib.Query() as db:

            id = e.get_opened_file_id()
            names = db.get_names()
            filepath = d.get_filepath()

        print id, names, filepath # ready to be used for something

这通常是一种好方法,还是有理由认为这不是一种好方法?

创建类属性是一个更好的主意。谢谢@jonsharpe和@JohnKeyes的建议

from libs import envlib
from libs import diskoplib
from libs import dblib

class Something(object):

    # Class attributes
    _e = envlib.Query()
    _d = diskoplib.Query()
    _db = dblib.Query()

    def __init__(self, parent=None):
        super(Something, self).__init__()

    def do_something(self):
        id = self._e.get_opened_file_id()
        filepath = self._d.get_filepath()
        names = self._db.get_names()

        print id, names, filepath # ready to be used for something

您认为带
(上下文管理器)的
能吸引您的是什么?如果您担心耦合,为什么不注入
Query
实例(例如
def do_something(self、env_Query、db_Query、file_Query):
或其他什么)?我不认为这对
import envlib.Query作为e
然后
self.\u Query=e()有多大的改进;e、 获取打开的文件id()
。正如@jonrsharpe所说,传递实例是一种更好的解耦方法。@JohnKeyes
Query
是子模块
envlib
的类,因此我会得到一个
ImportError:No module named Query
-但我想我可以先导入envlib
,然后是
self.\u e\u Query=envlib.Query()
@jornsharpe我在想,使用
上下文管理器可以使
e
d
db
之外使用
收集垃圾,从而节省一点内存。然而,情况似乎并非如此,而且,您和John的建议减少了代码,使其更易于阅读。@fredrik好的,我只是在展示相似之处而已。我看不出
在这里真正给了你什么。祝你好运