仅加载给定类所需的模块

Posted

技术标签:

【中文标题】仅加载给定类所需的模块【英文标题】:Load only needed modules for a given class 【发布时间】:2020-11-16 12:36:21 【问题描述】:

我有一个帮助文件,将其命名为 helper.py,具有三个不同的类 SQL,MLAWS

每个类都包含不同的辅助函数,但并非所有类都需要相同的包,例如 AWS 需要 boto3 模块,但 SQL 不需要。

我试过了

class AWS():
 def __init__(self):
   import boto3
   s3 = boto.client("s3")
 
 def magic():
   < do stuff with boto3>

但是当我随后调用 aws = AWS().magic() 时,我得到“boto3 未定义”。

我可以在helper.py 的最顶部包含所有包,但我宁愿不这样做

【问题讨论】:

请提供该错误消息的完整堆栈跟踪。如果您在__init__ 中使用import boto3,那么它只能在__init__ 中使用... NameError:名称“boto3”未定义。如果不在__init__ 中,你如何导入特定类的模块?您是否需要为每个功能都这样做? 【参考方案1】:

我建议将文件分成三部分。

- helper   # <-- make this as a folder
  - __init__.py
  - AWS.py
  - SQL.py
  - ML.py

__init__.py

from .AWS import AWS
from .SQL import SQL
from .ML import ML

如果你想在某个地方使用 AWS

from helper import AWS

【讨论】:

这样代码变得更加模块化和可维护...... 如果helper 是 git 中的子模块,__init__.py 是否必须存在? 不管git,它都会做一个文件夹python包。

以上是关于仅加载给定类所需的模块的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ to SQL 类所需的帮助

webpack 包中所需的模块未定义

如何导入BASE64Encoder类所需的包

如何使 windeployqt 仅包含所需的模块?

windows 无法启动加载内核所需的DLL文件

php 如果尚未加载,则将所需的脚本和样式加载到页面中。