Рубрики
Без рубрики

Как получить имя функции как строку в Python?

Состав задачи, заданный объект функции, назначенного имени. Как получить имя функции как строку? Например, рассмотрим следующую функцию your_function. Как получить название «your_function» от этого? def your_function (): пройти string_name = ??? Ваше желаемое значение результата, хранящегося в String_Name, является строкой «your_function». … Как получить имя функции как строку в Python? Подробнее “

Автор оригинала: Chris.

Постановка проблемы

Учитывая функциональный объект, назначенный на имя. Как получить имя функции как строку?

Например, рассмотрим следующую функцию your_function Отказ Как получить имя "your_function" из этого?

def your_function():
    pass

string_name = ???

Ваше желаемое значение результата хранится в string_name это строка "your_function" Отказ

print(string_name)
# your_function

Метод 1: Используйте атрибут __name__

Самый питонический способ извлечения имени от любого объекта или класса – использовать его __name__ атрибут. Атрибуты, заключенные в двойной подчеркивании (атрибуты Dunder), предоставляют специальные функциональные возможности для программистов Python. Например, звонок your_function .__ Имя__ дает строковое значение 'your_function' Отказ

def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function

Тем не менее, есть важный случай, когда этот метод потерпит неудачу.

💣 Внимание : В Python функции являются объектами. Вы можете создавать несколько переменных, указывающих на тот же объект в памяти. Поэтому вы можете создать два имени func_1 и func_2 Это оба указывают на один и тот же объект функции. При звонке func_1 .__ name__ Результат может быть func_2 вместо func_1 что ты ожидал.

Это демонстрируется в следующем минимальном примере:

def func_2():
    pass

func_1 = func_2
print(func_1.__name__)
# func_2

Как оба имена указывают на тот же объект памяти, но func_2 Во-первых, указывал на это имя объекта func_2 Отказ Использование памяти этого кода визуализируется с помощью инструмента Python Reputor:

Обе переменные относятся к тому же объекту функции, которые по умолчанию как func_2 имя.

Метод 2: Используйте атрибут __qualname__

Чтобы извлечь имя из любого объекта или класса, вы также можете использовать его __qualname__ атрибут. Например, звонок your_function .__ Qualname__ дает строковое значение 'your_function' Отказ Вы бы использовали __qualname__ над __имя__ Если вам также понадобится какой-то контекст, такой как класс, определяющий метод.

Следующий код создает функцию и способ внутри класса. Затем он сравнивает вывод __name__ и __qualname__ Атрибуты как функции, так и класса:

def my_function():
    pass


class My_Class(object):
    def my_method(self):
        pass


print(my_function.__name__)             # "my_function"
print(My_Class.my_method.__name__)      # "my_method"

print(my_function.__qualname__)         # "my_function"
print(My_Class.my_method.__qualname__)  # "My_Class.my_method"

Вы можете погрузиться глубже в идиосинкразиях __qualname__ здесь и здесь Отказ

Спасибо за прочтение этой статьи. Чтобы повысить свои навыки Python, подумайте о том, чтобы присоединиться к бесплатной академии электронной почты Finxter с большим количеством чит-листов, учебников Python и забиты забавных программиров! 🙂

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/how-to-get-a-function-name-as-a-string-in-python/”