我想知道是否将模块对象传递给需要它而不是使用它的类或对象import可能不是一个坏主意,因为它避免了对这些模块的硬依赖.
我想知道是否有人更了解Python Zen而不是我可以解释为什么这是一个可怕/不可怕的想法?
kin*_*all 31
您所谈论的内容称为依赖注入,被认为是使您的代码可测试的好习惯.我不认为有任何关于Python会使它成为unPythonic或不好的做法.
您还可以通过其他方式在Python中执行此操作,例如,根据您传入的某种标记导入不同的模块:
class Foo(object):
def __init__(self, testing=False):
if testing:
import module_test as module
else:
import module
self.module = module
Run Code Online (Sandbox Code Playgroud)
但是,传递对您希望使用的模块的引用更灵活,更好地分离关注点,并且不会比将引用传递给您希望使用的类或实例(或字符串或整数)更接近Pythonic.
对于普通(非测试)用例,您可以使用默认参数值:
class Foo(object):
def __init__(self, module=None):
if not module:
import module
self.module = module
Run Code Online (Sandbox Code Playgroud)
小智 5
我比赛迟到了,但我刚刚学会了一种方法并想分享:
chosen_config='moduleName' #string, relative path. example: 'configurations.local.logistic'. You would take this from input, or the command line, or something like that
import importlib
config=importlib.import_module(chosen_config,package='myPackage')
#...do stuff...
data=pd.read_csv(config.dataFile)
#...more stuff...
save(config.outputFile)
Run Code Online (Sandbox Code Playgroud)
相当于:
import moduleName as config
Run Code Online (Sandbox Code Playgroud)
但我让用户(又名 Future Me 或我信任的人)决定导入哪个模块。
用例(我的情况):您想要使用一系列不同的设置来运行一系列实验,这些设置将影响多个脚本。您已将每个实验的设置存储在专用的配置文件中。您希望在不修改代码的情况下运行所有任务。