检查类型而不从外部库中导入类型

时间:2018-09-18 08:14:49

标签: python

我想编写一个装饰器,该装饰器根据传入的数据类型运行一些代码。问题是,我正在为库编写此装饰器,我不想仅将Pandas添加到依赖项中对于这一件事。

def my_function(fn):
    @wraps(fn)
    def wrapped(*args, **kwargs):       
         if isinstance(my_input, pd.DataFrame):
             # ...CODE TO RUN
    return wrapped

我考虑过的一件事是,将带有库的DataFrame的腌制版本打包在一起。这似乎可行:

>>> import pandas as pd
>>> pd.to_pickle(pd.DataFrame, "df_type.pickle")
>>> DataFrame = pd.read_pickle("df_type.pickle")
>>> isinstance(pd.DataFrame(), DataFrame)
True

是否有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果未在用户环境中安装熊猫,则不会获得熊猫数据框作为输入,因此您不必担心它。因此,您可以仅测试是否已安装panda,并仅在必要时添加此代码路径:

try:
    from panda import DataFrame
    has_panda = True
except ImportError:
    DataFrame = None
    has_panda = False


def my_function(fn):
    @wraps(fn)
    def wrapped(*args, **kwargs):       
         if has_panda and isinstance(my_input, DataFrame):
             # ...CODE TO RUN
    return wrapped