Объект класса (пока) не существует, пока выполняется тело класса, поэтому у кода в теле класса нет способа получить ссылку на него (так как, вообще говоря, нет никакого способа для любого кодачтобы получить ссылку на любой объект, который не существует).Test2.__name__
, однако, уже делает то, что вы конкретно ищете, поэтому я не думаю, что вам нужен какой-либо обходной путь (например, метаклассы или декораторы классов) для вашего конкретного варианта использования.
Редактировать: для отредактированного вопроса, где вам не нужно просто указывать имя в виде строки, декоратор класса - это самый простой способ обойти проблему (в Python 2.6 или более поздней версии):
def maketype(cls):
cls.type = TextField(default=cls.__name__)
return cls
и поставьте @maketype
перед каждым классом, который вы хотите украсить таким образом.В Python 2.5 или более ранних версиях вам вместо этого нужно сказать maketype(Base)
после каждого соответствующего оператора class
.
Если вы хотите, чтобы эта функция была унаследована, вам нужно определить пользовательскийметакласс, который выполняет те же функции в своих __init__
или __new__
методах.Лично я бы рекомендовал не определять пользовательские метаклассы, если они не являются действительно необходимыми - вместо этого я бы придерживался более простого подхода декоратора.