Похоже, вы действительно хотите фабрику классов, а не метакласс. (Да, метаклассы также являются фабриками классов, но они не единственные.) Поэтому самое простое решение - определить AFactory
как функцию:
def AFactory(name):
class A:
NAME = name
VARIABLE = dct[NAME]
return A
Если вам действительно нужен метакласс, вам следует реализовать альтернативный конструктор , а не пытаться сделать метакласс вызываемым как AFactory(name)
:
class AFactory(type):
@classmethod
def make(mcs, name):
clsname = 'A'
bases = ()
attrs = {
'NAME': name,
'VARIABLE': dct[name]
}
return mcs(clsname, bases, attrs)
Который вы могли бы затем использовать как
A1 = AFactory.make('key1')