我想知道将模块对象传递给需要它的类或对象而不是使用import
可能不是一个坏主意,因为它避免了对这些模块的硬依赖。
我想知道是否有人更了解Python Zen而不是我可以解释为什么这是一个可怕/不可怕的想法?
答案 0 :(得分:29)
您所谈论的内容称为dependency injection,并且被视为使您的代码可测试的良好做法。我不认为有任何关于Python会使它成为unPythonic或不好的做法。
您可以通过其他方式在Python中执行此操作,例如根据您传入的某种标记导入不同的模块:
class Foo(object):
def __init__(self, testing=False):
if testing:
import module_test as module
else:
import module
self.module = module
但是传递对你想要使用的模块的引用更灵活,更好地区分关注点,并且不比Pythonic传递对你想要使用的类或实例(或字符串或整数)的引用。
对于普通(非测试)用例,您可以使用默认参数值:
class Foo(object):
def __init__(self, module=None):
if not module:
import module
self.module = module
答案 1 :(得分:4)
如果有问题的类可以使用几个不同模块中的一个,那么传入你想要它使用的模块是有意义的。
在我到目前为止遇到的每种情况中,所需的模块都是确定的,因此首选使用import
。