Когда встраивать определения метакласса в Python?
Сегодня я встретил удивительное определение метакласса в 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
Любые другие соображения?