Динамическое создание типов в Python - PullRequest
3 голосов
/ 03 августа 2010

Предположим, я создаю составной набор типов:

def subordinate_type(params):
   #Dink with stuff
   a = type(myname, (), dict_of_fields)
   return a()

def toplevel(params)
    lots_of_types = dict(keys, values)
    myawesomedynamictype = type(toplevelname, (), lots_of_types)

    #Now I want to edit some of the values in myawesomedynamictype's 
    #lots_of_types. 

    return myawesomedynamictype()

В этом конкретном случае мне нужна ссылка на "класс типов" myawesomedynamictype, вставленный в lots_of_types.

IЯ пытался перебрать lots_of_types и установить его, предположив, что ссылки были направлены на одно и то же, но я обнаружил, что myawesomedynamictype был поврежден и потерял свои поля.

Проблема, которую я пытаюсь решить, заключается в том, что я получаю значения, связанные с типом subordinate_type, и мне нужно сгенерировать экземпляр toplevel на основе subordinate_type.

1 Ответ

1 голос
/ 08 июля 2011

Это древний вопрос, и, поскольку неясно, что пытается сделать код (скорее суть кода, а не рабочий код), ответить на него немного сложно.

Но звучит так, как будто вы хотите ссылку на динамически созданный класс "myawesomedynamictype" в самом классе.Копия (я думаю, копия) словаря lots_of_types стала __dict__ этого нового класса, когда вы вызвали type () для его создания.

Итак, просто установите новый атрибут в классе, чтобызначение класса, который вы только что создали;Это то, что вы были после?

def toplevel(params)
    lots_of_types = dict(keys, values)
    myawesomedynamictype = type(toplevelname, (), lots_of_types)
    myawesomedynamictype.myawesomedynamictype = myawesomedynamictype
    return myawesomedynamictype()
...