给定一个类型对象的实例,如何调用该类的构造函数(在其他语言中等效于GetConstructor)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定一个类型对象的实例,如何调用该类的构造函数(在其他语言中等效于GetConstructor)相关的知识,希望对你有一定的参考价值。
看起来很简单,但是如果仅给出类型,我就无法弄清楚如何获得一个类构造函数。为了清楚起见,我创建了一个代码片段,以功能存根的形式演示了该问题。
Google没有提供任何有用的信息,也许我找不到合适的关键字来避免SEO驱使我进入流行的python网站简介。
from typing import NamedTuple
class Person(NamedTuple):
name: str
age: int
def magic_thing_maker(the_type, ctor_args):
pass # I am stuck with what to do here
some_type = type(Person)
the_person = magic_thing_maker(some_type, 'name':'Saul Goodman',
'age':37)
assert (the_person == Person('Saul Goodman', 37))
请随时致电我的非pythonic询问此问题;我知道问这个问题表明我应该寻求更健康的方法来解决当前的问题。
非常感谢您的帮助。
答案
由于type(Person)
为type
,因此可以使用类名作为替代。可以使用globals将字典传递给构造函数,从而从**-operator实例化该类。这是一个例子:
def magic_thing_maker(the_type, ctor_args):
return globals()[the_type](**ctor_args)
some_type = Person.__name__
the_person = magic_thing_maker(some_type, 'name':'Saul Goodman',
'age':37)
请参见question以获取更多信息。要从导入的模块实例化类,可以使用getattr,请参见此question。
以上是关于给定一个类型对象的实例,如何调用该类的构造函数(在其他语言中等效于GetConstructor)的主要内容,如果未能解决你的问题,请参考以下文章