Python:如何使用 Importlib 创建类对象

标签 python python-importlib

<分区>

我知道类似的问题已经被问过/回答过好几次了。但请继续阅读..

我正在尝试根据 Python 3.6 中“Convert string to Python Class Object”中所述的字符串值创建一个类。

utils.py

class Foo(object):
    def __init__(self):
        print("In the constructor of Foo")

    def What(self):
        print("so what ... ")

class FooParam(object):
    def __init__(self, v):
        self.value = v
        print("In the constructor of FooParam")

    def What(self):
        print("Value=" % self.value)
        print("So what now ...")

欢迎.py

def TEST1():
    m = importlib.import_module("utils")
    c = getattr(m, "Foo")
    c.What()  

if __name__ == '__main__': 
    TEST1()

错误

TypeError: What() missing 1 required positional argument: 'self'

那我做错了什么?

另外,如何创建“FooParam”对象并将值传递给构造函数。

最佳答案

导入模块后,只需使用存储导入模块的变量进行访问:

m = importlib.import_module("utils")
foo = m.Foo()
foo.What()

import_module 执行与 import 相同的步骤。

c = getattr(m, "Foo") 代码行等价于 f = Foo 所以这意味着你不是在创建一个实例,而是你得到一个对该类的引用。

关于Python:如何使用 Importlib 创建类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434118/

相关文章:

python - 用 Python 编写 Shell?

jquery - NoReverseMatch at/product/pussyes/Reverse 找不到 'basket_adding'。 'basket_adding' 不是有效的 View 函数或模式名称

python - 定义字符串时出现关键错误,python

python - Tkinter - 输入框 - 日期格式

python - 重新加载功能无法删除已删除的变量

python - 模块 'importlib' 没有属性 'util'

python - imp 模块已弃用,取而代之的是 importlib

linux - Docker Linux 容器内核更新

python - 在 IPython 中使用 importlib 重新加载模块

python - 使用 OpenCV Python 从 BGR 转换为 YUYV