我正在使用 importlib 在运行时导入模块。这些模块是我的应用程序的插件,必须实现 1 个或多个模块级功能。我已经开始向我的应用程序添加类型注释,但我从 mypy 中收到一个错误说明
模块没有属性“generate_configuration”
其中“generate_configuration”是模块功能之一。
在这个例子中,模块中只需要有一个 generate_configuration 函数。该函数采用单个 dict 参数。
def generate_configuration(data: Dict[str, DataFrame]) -> None: ...
Run Code Online (Sandbox Code Playgroud)
我一直在寻找如何指定模块的接口,但我能找到的只是类接口。有人可以指点我一些显示如何执行此操作的文档吗?我的 google-fu 在这方面让我失望。
加载此模块的代码如下所示。错误是由最后一行生成的。
plugin_directory = os.path.join(os.path.abspath(directory), 'Configuration-Generation-Plugins')
plugins = (
module_file
for module_file in Path(plugin_directory).glob('*.py')
)
sys.path.insert(0, plugin_directory)
for plugin in plugins:
plugin_module = import_module(plugin.stem)
plugin_module.generate_configuration(directory, points_list)
Run Code Online (Sandbox Code Playgroud) 我试图在Elixir中实现Modbus协议,作为练习Elixir和进一步理解功能编程的练习.
Modbus数据被建模为连续的寄存器块.modbus读取请求采用以下形式.这指示服务器收集从寄存器开始并继续寄存器的寄存器.例如,如果为0且为5,则服务器将返回寄存器0,1,2,3和4的值.
我认为用于建模这些寄存器的良好数据结构是一个映射,其中键是寄存器,值是寄存器的值.因此,我很好奇是否有一种习惯的方法从给定多个键的映射中检索多个值,而不必遍历键并为每个键调用get().
如果地图不合适,我会接受其他建议以获得更好的数据模型.
Python 在运算符模块中有itemgetter来执行此任务.也许这将为我想要完成的事情提供另一条线索.