Скажем, у меня есть список словарей примерно так:
[
dict(name='Person', title='Person class'),
dict(name='Employee', title='Employee class')
]
И я хочу создать для классов; один с именем Person с атрибутом title, установленным в «Person class», и другой класс с именем Employee, в котором title установлен в «Employee class». Имя класса может быть любым, но имена атрибутов, которые будут иметь класс, известны, в данном случае title.
Что я хочу закончить, так это новый список динамически создаваемых классов;
classes = [Person, Employee]
Как будто класс был определен вручную:
class Person:
title = 'Person class'
который может быть создан следующим образом:
>>> x = classes[0]()
>>> print x.title
"Person class"
И как будто это не так уж плохо, я бы хотел назначить метод, определенный в другом классе, динамически создаваемым классам:
class X:
def sum(self, a, b):
print self
return a+b
>>> x = X()
>>> x.sum(1,2)
__main__.x
3
>>> classes[0].sum = X.sum
>>> classes[0].sum(1,2)
__main__.Person
3
Я знаю, что вышеупомянутое не работает - и, возможно, это даже не имеет смысла. Но может ли это быть сделано как показано - присвоение метода, определенного в классе, другому классу?