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

前端之家收集整理的这篇文章主要介绍了在创建从中继承的对象时在Python中进行条件导入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我创建了一个连接到其他库的包(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
原文链接:https://www.f2er.com/python/438943.html

猜你在找的Python相关文章