здесь базовая (может быть странная) функция, которая показывает имя своего аргумента ...
идея состоит в том, чтобы анализировать код и искать вызовы функции (добавленный в метод init , он может помочь найти имя экземпляра, хотя и с более сложным анализом кода)
def display(var):
import inspect, re
callingframe = inspect.currentframe().f_back
cntext = "".join(inspect.getframeinfo(callingframe, 5)[3]) #gets 5 lines
m = re.search("display\s+\(\s+(\w+)\s+\)", cntext, re.MULTILINE)
print m.group(1), type(var), var
пожалуйста, обратите внимание:
Получение нескольких строк из кода вызова помогает в случае разделения вызова, как показано в следующем примере:
display(
my_var
)
но даст неожиданный результат на этом:
display(first_var)
display(second_var)
Если у вас нет контроля над форматом вашего проекта, вы все равно можете улучшить код для обнаружения и управления различными ситуациями ...
В целом, я думаю, статический анализ кода может дать более надежный результат, но мне лень проверять его сейчас