Получить присвоенное имя функции обратного вызова в Python

Я пытаюсь управлять некоторыми функциями в python, устанавливая атрибуты членов класса, и вот в чем проблема

class Test:
    def __init__(self):
        self.callback=b

    def a(self,name):
        print(name)

def b():                # a function that does anything
    print("I am d")

t=Test()
t.a(t.callback.__name__)   #Prints 'b'

Итак, у меня напечатано 'b', но я бы хотел, чтобы это могло быть 'обратным вызовом', поэтому я могу использовать это имя в функции 'a', чтобы найти других членов в моем объекте с именем, которое начинается с 'обратного вызова'

Есть ли способ получить это? Заранее спасибо

Нет, вы не можете (на самом деле не должны) переходить от __name__ функции к имени ее переменной или от любого значения к любому имени. Недавно у нас был связанный вопрос здесь. self.callback = b - это просто присвоение еще одного имени (которых может быть тысячи) некоторому функциональному объекту в памяти. В любом случае, когда вы можете записать t.callback, вы знаете, что t уже имеет атрибут с именем callback.

timgeb 19.11.2018 08:58

В принципе способ есть, но он будет ужасно медленным. Не говоря уже о довольно запутанном обслуживании. Какую проблему ты пытаешься решить?

MisterMiyagi 19.11.2018 09:04

Хорошо, понятно, спасибо за ссылку. Итак, если я хорошо понимаю, невозможно получить другое имя, потому что self.callback = b не реплицирует функцию, поэтому он использует имя назначения

Bucky 19.11.2018 09:09

@MisterMiyagi Я использую несколько функций обратного вызова в объекте, назначенном таким образом, и каждая из них также имеет связанную переменную в этом объекте. И у меня есть последняя функция, которая вызывает один из обратных вызовов и также должна использовать связанные данные. Так как функции обратного вызова и данные имеют одинаковое имя, я подумал, что это будет легко сделать, не передавая данные в параметре

Bucky 19.11.2018 09:17

@MisterMiyagi, но это было сделано специально, чтобы оптимизировать время вычислений, поэтому я, возможно, попробую другие варианты

Bucky 19.11.2018 09:18

Возможно, вы ищете простой диктант. Функции - это действительные ключи dict.

MisterMiyagi 19.11.2018 09:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
577
0

Другие вопросы по теме