Не гарантируется, что объект класса существует и доступен пользователю, когда определение класса еще не завершило оценку. Даже если он был доступен, он не мог быть инициализирован в той степени, в которой вы могли бы сделать с ним что-нибудь полезное.
Тем не менее, вы можете получить название класса. __qualname__
- это атрибут, который содержит квалифицированное имя экземпляра класса / функции / метода / дескриптора / генератора. Вы должны иметь доступ к нему из определения класса.
class Fred:
print("Fred's qualname:", __qualname__)
class Barney:
print("Barney's qualname:", __qualname__)
Результат:
Fred's qualname: Fred
Barney's qualname: Fred.Barney
Если ваш класс не определен на уровне файлов, вам может потребоваться выполнить некоторые манипуляции со строками, чтобы отделить его имя от остальной части пути. Например, измените приведенный выше пример на print("Barney's qualname:", __qualname__.rpartition(".")[-1])
, чтобы получить просто «Барни», а не «Фред. Барни».
Несмотря на все мои усилия, я не смог найти документацию, которая явно подтверждает, что __qualname__
имеет разумное значение при доступе как обычное имя, а не как атрибут. Я не совсем уверен, что это четко определенное поведение, поэтому я не думаю, что могу безоговорочно одобрить его для кода производственного качества.