【问题标题】: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__ 中,你如何导入特定类的模块?您是否需要为每个功能都这样做?

标签: python class python-module


【解决方案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包。
猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2021-09-21
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多