Для данного экземпляра объекта типа, как вы вызываете конструктор класса (эквивалент GetConstructor в других языках) - PullRequest
0 голосов
/ 25 октября 2019

Это кажется простым, но я не могу понять, как получить конструктор класса, если ему дан только тип. Для ясности я создал фрагмент кода, демонстрирующий проблему как заглушку функции.

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

Не стесняйтесь звонить моему пифону за этот вопрос;Я понял, что задание этого вопроса означает, что я должен искать более здоровые подходы к данной проблеме.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 25 октября 2019

Поскольку type(Person) равно type, вы можете использовать имя класса в качестве альтернативы. Класс можно создать из globals , используя ** - оператор для передачи словаря в конструктор. Вот пример:

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})

См. Этот вопрос для получения дополнительной информации. Для создания экземпляров классов из импортированных модулей вы можете использовать getattr , см. Этот вопрос .

...