Как мне узнать название класса, в котором я сейчас учусь?
Пример:
def get_input(class_name):
[do things]
return class_name_result
class foo():
input = get_input([class name goes here])
Из-за характера программы, с которой я взаимодействую (vistrails), я не могу использовать ее __init__()
для инициализации input
.
getName
дочерний класс, он выводит имя дочернего класса. Затем становится сложно, если вам ДЕЙСТВИТЕЛЬНО нужен класс, с которым вы работаете.getName
из родительского класса он будет выводить имя класса ребенка? Хорошо, что указали на это.getName()
метод определен в суперклассе) является правильным.В теле класса имя класса еще не определено, поэтому оно недоступно. Вы не можете просто ввести имя класса? Возможно, вам нужно подробнее рассказать о проблеме, чтобы мы смогли найти для вас решение.
Я бы создал метакласс, чтобы делать эту работу за вас. Он вызывается во время создания класса (концептуально в самом конце class: block) и может управлять создаваемым классом. Я не тестировал это:
источник
MyType
вsuper
строкеInputAssigningMetaclass
?Вы можете получить к нему доступ через приватные атрибуты класса:
РЕДАКТИРОВАТЬ:
Как сказано
Ned Batcheler
, это не будет работать в теле класса, но будет работать в методе.источник
Представлен PEP 3155
__qualname__
, реализованный в Python 3.3.Он доступен из самого определения класса или функции, например:
будет эффективно печатать
Foo
. Вы получите полное имя (за исключением имени модуля), поэтому вы можете разделить его на.
символ.Однако нет никакого способа получить реальный дескриптор определяемого класса.
источник
РЕДАКТИРОВАТЬ: Да, вы можете; но вы должны обмануть: имя текущего запущенного класса присутствует в стеке вызовов, и
traceback
модуль позволяет вам получить доступ к стеку.Однако я бы не стал этого делать; Мой первоначальный ответ по-прежнему является моим предпочтением в качестве решения. Оригинальный ответ:
возможно, самым простым решением является использование декоратора, который похож на ответ Неда с участием метаклассов, но менее мощный (декораторы способны к черной магии, но метаклассы способны к древней оккультной черной магии)
источник
источник
Думаю, должно быть так:
источник