加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在创建从中继承的对象时在Python中进行条件导入

发布时间:2020-12-16 22:24:21 所属栏目:Python 来源:网络整理
导读:我创建了一个连接到其他库的包(livelossplot).它有很多可选的依赖项(深度学习框架),我不想强??迫人们安装它们. 现在我使用条件导入,本着以下精神: try: from .keras_plot import PlotLossesKerasexcept ImportError: # import keras plot only if there is

我创建了一个连接到其他库的包(livelossplot).它有很多可选的依赖项(深度学习框架),我不想强??迫人们安装它们.

现在我使用条件导入,本着以下精神:

try:
    from .keras_plot import PlotLossesKeras
except ImportError:
    # import keras plot only if there is keras
    pass

但是,这意味着它会导入大型库,即使不打算使用它们也是如此.问题是:只有在创建特定对象时才能导入库?

对于Python函数,它很简单:

def function_using_keras():
   import keras
   ...

从其他类继承的类有什么好的做法?

在定义对象之前,似乎需要导入父类:

from keras.callbacks import Callback
class PlotLossesKeras(Callback):
    ...
最佳答案
最直接,最容易理解的解决方案是将库拆分为子模块.

与尝试在对象初始化上进行导入相比,它有几个优点:

>用户知道会发生什么. import my_lib.keras很可能依赖于keras
>导入错误发生在导入期间,而不是在运行时
>通过不依赖于从未经插入的类继承的技巧,您可以避免许多潜在的问题
>只需更改import my_lib.keras以导入my_lib.tensorflow,最终用户就可以非常轻松地在实现之间切换

这样的解决方案可能看起来像

# mylib/__init__.py
class SomethingGeneric():
    pass

def something_else():
    pass

然后

# mylib/keras.py
import keras

class PlotLosses():
    pass

# mylib/tensorflow.py
import tensorflow

class PlotLosses():
    pass

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读