当设计需要其他python库的python库时,一般的方法是什么?
我已经用Python2.7和PySide创建了一个应用程序。由于这个应用程序相当大,我不得不创建许多自定义库。这些库有时需要从其他自定义库调用方法,因此我让库中的类继承其他库的类。然而,这有时会导致继承解决问题,导致我不得不创建冗余和非优雅的解决方案作为解决方法 现在,我正在从头重写应用程序,我希望确保我设计的自定义库不依赖于继承。通常最好的方法是什么 我想我应该把当设计需要其他python库的python库时,一般的方法是什么?,python,Python,我已经用Python2.7和PySide创建了一个应用程序。由于这个应用程序相当大,我不得不创建许多自定义库。这些库有时需要从其他自定义库调用方法,因此我让库中的类继承其他库的类。然而,这有时会导致继承解决问题,导致我不得不创建冗余和非优雅的解决方案作为解决方法 现在,我正在从头重写应用程序,我希望确保我设计的自定义库不依赖于继承。通常最好的方法是什么 我想我应该把和一起使用: from libs import envlib from libs import diskoplib from lib
和一起使用:
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所说,传递实例是一种更好的解耦方法。@JohnKeyesQuery
是子模块envlib
的类,因此我会得到一个ImportError:No module named Query
-但我想我可以先导入envlib
,然后是self.\u e\u Query=envlib.Query()
@jornsharpe我在想,使用上下文管理器可以使e
,d
,db
在之外使用收集垃圾,从而节省一点内存。然而,情况似乎并非如此,而且,您和John的建议减少了代码,使其更易于阅读。@fredrik好的,我只是在展示相似之处而已。我看不出和在这里真正给了你什么。祝你好运