python怎么把类作为参数传递并创建实例

新の助2
  • 305

怎么把一个类作为参数,然后直接创建实例化,例如这样:

def createModel(model):
    info = model()
    return info
    
obj1 = createModel(book) 
obj2 = createModel(pen) 

这个应该算是叫反射吧?
我所知道的方法,可以用动态引导来实现,例如importlib.import_module('myproject.book')
但是这样要写字符串,不是我想要的,
能不能直接传类进去,然后在createModel内部处理一下,就可以实例化呢?

评论
阅读 10.3k
3 个回答
✓ 已被采纳

是可以的

比如下面的例子

class A:
    def t(self, s):
        return s 
    pass
class B:
   def test(self, cls):
       return cls()
   pass

v1 = A()

print(v1)
print(v1.t("classic creation"))


v2=B().test(A)
print(v2)
print(v2.t("created by class name as argument"))

将会输出

<__main__.A instance at 0x1069fed40>
classic creation
<__main__.A instance at 0x1069fedd0>
created by class name as argument

可以使用装饰器 @classmethod

使用之后,函数内多一个cls参数,cls就是类,你可以 info=cls()创建实例。

其实,这个和初始化__init_(self)中的self类似,self代表实例,而这里cls代表类。

手机上敲字费劲儿,回头电脑上改一下版,谢谢。

自己不都写出来了么,不知道到底在问什么……

# -*- coding: utf-8 -*-

class book(object):
    pass

class pen(object):
    pass

def createModel(model):
    info = model()
    return info

obj1 = createModel(book) 
obj2 = createModel(pen) 

print(obj1, obj2)
撰写回答

登录后参与交流、获取后续更新提醒

宣传栏