当前位置: 首页 > 知识库问答 >
问题:

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

万喜
2023-03-14

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

我试图从字符串值创建一个类,如Python 3.6中的“将字符串转换为Python类对象”中所述。

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 ...")

welcome.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'

那么我做错了什么?

此外,我如何创建一个对象的"foParam"并传递一个值给构造函数。

共有2个答案

宫铭
2023-03-14

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

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

import_module执行与导入相同的步骤。

这个c=getattr(m,“Foo”)代码行相当于f=Foo,这意味着您不是在创建实例,而是在获取对该类的引用。

端木令
2023-03-14

我怀疑c是类Foo,但不是类的实例。

这相当于简单地调用

Foo.what()

这就是为什么自我没有定义!

而您想要的是创建类的实例(给它一个“self”属性),然后调用它的方法,即。

foo_instance = Foo()
foo_instance.What()

所以试着用..替换c.What()。。

foo_instance = c()
foo_instance.What()

对于foParam:

#import the class FooParam
c = getattr(m, "FooParam")
#create an instance of the class, initializing its values (and self)
fooparam_instance = c(3.14)
#call its method!
fooparam_instance.What()

总的来说,我会将变量c重命名为foo_import和fooparam_import:)

 类似资料:
  • 本文向大家介绍如何在Python中创建类对象?,包括了如何在Python中创建类对象?的使用技巧和注意事项,需要的朋友参考一下 使用该类的构造函数创建一个类对象。然后将该对象称为类的实例。类实例化使用函数表示法。  在下面的代码中,我们定义一个类并创建了相同类的实例,如下所示

  • 主要内容:Python类的实例化,Python类对象的使用通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象。 创建类对象的过程,又称为类的实例化。 Python类的实例化 对已定义好的类进行实例化,其语法格式如下: 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或者添加的 __init__() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。 例如,如下代码创建了名为 CLang

  • 问题内容: 我试图通过传递另一个jsonObject与jsonObject转换jsonArray。请提供任何示例代码? 问题答案: 这样,您可以为响应编写POJO / Model类 ----------------------------------- com.example.HomePlace.java -------- ----------------------------------- c

  • 问题内容: 假设您必须在python中创建10个类对象,并对其进行处理,例如: 您将如何循环处理,并为每个对象分配一个变量(如),从而使代码更短?每个对象都可以在循环外部访问 问题答案: 每天都会以不同的方式询问这个问题。答案是:将数据放在变量名之外,这是必填的博客文章。 在这种情况下,为什么不列出objs?

  • 问题内容: 我需要使用NDK以及JNI将一些功能实现到Android应用程序中。 这是我所写的C代码: 我的问题或多或少在代码内得到了解释。也许还可以:函数(jobject)的返回类型可以吗? 现在,NDKTest.java: 当我尝试运行代码时,它不起作用。 问题答案: 既然是内部类,那么获得它的方法就是 内部类的约定在权威规范中并未真正明确记录,但是根深蒂固地存在于如此多的工作代码中,因此不太

  • 我需要使用Jackson创建一个JSON字符串,如下所示。我知道这里已经回答了类似的问题:使用jackson创建一个json对象 但我期望的JSON字符串与上面示例中的有点不同。