Как автоматически зарегистрировать класс, когда он определен

Я хочу, чтобы экземпляр класса был зарегистрирован, когда класс определен. В идеале приведенный ниже код подойдет.

registry = {}

def register( cls ):
   registry[cls.__name__] = cls() #problem here
   return cls

@register
class MyClass( Base ):
   def __init__(self):
      super( MyClass, self ).__init__() 

К сожалению, этот код генерирует ошибку NameError: глобальное имя 'MyClass' не определено .

Что происходит, находится в # проблема здесь строка . Я пытаюсь создать экземпляр класса MyClass , но декоратор еще не вернулся, поэтому его не существует.

Может быть, это как-то с помощью метаклассов или чего-то подобного?

39
задан Mechanical snail 1 September 2011 в 06:07
поделиться