【问题标题】:How to load a Class from File given only its String specification in Python?如何从文件中加载一个类,只给它在 Python 中的字符串规范?
【发布时间】:2021-04-07 10:51:02
【问题描述】:

我打算让用户在运行时(在我的 Python 3.8 程序中)决定从给定的一组类中加载哪个类来执行某些操作。 例如,如果我们谈论食物,用户可以决定是选择eggs 还是sausage。这两个类都定义在一个或多个单独的文件中,(这两个文件都)包含在一个已知文件夹中。

现在,我的问题是如何在给定字符串表示 eggs(由用户输入)的情况下加载相应的类 eggs。我看到存在一种方法__import__,它旨在解决此类问题。根据documentation,可以通过执行以下命令访问spam.ham 中定义的类eggs

_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1)
eggs = _temp.eggs

相当于from spam.ham import eggs

这个例子的问题是它假设了代码 sn-p _temp.eggs,在我的例子中,这不是先验的/已知的。 因此,我想知道如何将eggs = _temp.eggs 转换为一些语句,其中_temp.eggs 被一些语句替换,其中.eggseggs 的一些字符串表示替换。

例如,给定_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1),我正在寻找像eggs = _temp['eggs'] 这样的命令。

【问题讨论】:

    标签: python class import


    【解决方案1】:

    事实证明,给定起点:

    _temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1) 
    

    问题最终归结为通过属性名称检索对象的属性。

    这个问题的答案可以在here找到。

    因此,给定_tempeggs 可以通过eggs = getattr(_temp, 'eggs') 访问。

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多