Сегодня я столкнулся с удивительным определением метакласса в Python здесь, с определением метакласса, эффективно вложенным. Соответствующая часть
class Plugin(object):
class __metaclass__(type):
def __init__(cls, name, bases, dict):
type.__init__(name, bases, dict)
registry.append((name, cls))
Когда имеет смысл использовать такое встроенное определение?
Дополнительные аргументы:
Одним из аргументов может быть то, что созданный метакласс не может использоваться повторно в другом месте, используя эту технику. Аргумент счетчика заключается в том, что общий шаблон использования метаклассов определяет метакласс и использует его в одном классе и затем наследует от него. Например, в консервативном метаклассе определение
class DeclarativeMeta(type):
def __new__(meta, class_name, bases, new_attrs):
cls = type.__new__(meta, class_name, bases, new_attrs)
cls.__classinit__.im_func(cls, new_attrs)
return cls
class Declarative(object):
__metaclass__ = DeclarativeMeta
def __classinit__(cls, new_attrs): pass
мог быть записан как
class Declarative(object): #code not tested!
class __metaclass__(type):
def __new__(meta, class_name, bases, new_attrs):
cls = type.__new__(meta, class_name, bases, new_attrs)
cls.__classinit__.im_func(cls, new_attrs)
return cls
def __classinit__(cls, new_attrs): pass
Любые другие соображения?