Я потратил некоторое время на изучение модуля collections.namedtuple
несколько недель назад. Модуль использует функцию factory, которая заполняет динамические данные (имя нового класса namedtuple
и имена атрибутов класса) в очень большую строку. Затем exec
выполняется со строкой (которая представляет код) в качестве аргумента, и возвращается новый класс.
Кто-нибудь знает, почему это было сделано таким образом, когда есть конкретный инструмент для такого рода вещей, который легко доступен, т.е. метакласс? Я не пытался сделать это сам, но похоже, что все, что происходит в модуле namedtuple
, могло быть легко выполнено с использованием метакласса namedtuple
, например:
class namedtuple(type):
и т.д.