Вы говорите, что хотите динамически генерировать что-то, что может обработать метакласс.Есть очень простой способ добиться этого, не прибегая к таким хакерским действиям, как exec
.Все, что вам нужно сделать, это подумать об этом по-другому: изменить метакласс так, чтобы там генерировались имена.
class AutoFieldMeta(type):
def __new__(mcs, name, bases, d):
for field in d.get('AUTOFIELDS', ()):
d[field] = field + ' value'
return type.__new__(mcs, name, bases, d)
class A(object, metaclass=AutoFieldMeta):
AUTOFIELDS = ('one', 'two', 'three')
>>> A.one
'one value'
>>>
, и если вы не хотите изменять существующий метакласс, вы можете создать его подкласс.