仅加载给定类所需的模块
Posted
技术标签:
【中文标题】仅加载给定类所需的模块【英文标题】:Load only needed modules for a given class 【发布时间】:2020-11-16 12:36:21 【问题描述】:我有一个帮助文件,将其命名为 helper.py
,具有三个不同的类 SQL,ML
和 AWS
。
每个类都包含不同的辅助函数,但并非所有类都需要相同的包,例如 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包。以上是关于仅加载给定类所需的模块的主要内容,如果未能解决你的问题,请参考以下文章