Тут, батенька, вы несколько загнули. Нельзя из class code block получить доступ к этому самому классу - его попросту еще не существует.
Поэтому:
1. Декоратор для класса.
@deco
class A(object):
pass
Просто и сердито.
2. Метакласс
class Meta(object):
def __init__(cls, name, bases, dct):
type.__init__(cls, name, bases, dct)
# А вот здесь уже имеем полностью созданный класс, для которого был указан наш метакласс.
class Base(object):
__metaclass__ = Meta
class A(Base):
pass
Метакласс не забудешь - если был прописан, хоть и в базовом классе - вызовется.
Зато декоратор нагляднее. И понимают его быстрее - магии меньше.
3. Просто пишем в коде.
class A(object):
pass
register(A)
Самый тупой и некрасивый метод.
Теперь об инициализации. Код прийдется импортировать, явно или неявно. Лучше всего, конечно, в __init__.py
Soteric, раз уж вы хотите использовать для сравнения C#…
В нем все равно указывается, какие файлы попадут в assembly. И какие assembly будут подгружены. Импорт пакета ничем не отличается - указываем имя пакета, а дальше пакет сам инициализирует себя как ему нужно.
В декораторы, кстати, похожи на атрибуты в .Net. Только в отличие от атрибутов декоратор может сделать что угодно с функцией - а не только зарегистрироваться для дальнейшего использования. Так оно погибче будет.