给定一个类型对象的实例,如何调用该类的构造函数(在其他语言中等效于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)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript面向对象之函数构造器的理解

javascript构造函数小知识

在 php 中调用类方法(带构造函数)而不实例化对象

c# 有调用一个类的静态方法,是不是执行这个类的构造函数

(JAVA)啥是实例化如何实现类的实例化(用类或方法创建一个该类的实例)?

C# 关于 构造函数问题 关于对象实例化