Ну, есть почти способ сделать это:
#!/usr/bin/env python
import traceback
class SomeObject():
def __init__(self, def_name=None):
if def_name == None:
(filename,line_number,function_name,text)=traceback.extract_stack()[-2]
def_name = text[:text.find('=')].strip()
self.defined_name = def_name
ThisObject = SomeObject()
print ThisObject.defined_name
# ThisObject
модуль отслеживающий позволяет заглянуть в сотрудничестве de используется для вызова SomeObject(). С небольшим перегибом строк, text[:text.find('=')].strip()
вы можете угадать, что должно быть def_name.
Однако этот хак хрупкий.Например, это не работает так хорошо:
ThisObject,ThatObject = SomeObject(),SomeObject()
print ThisObject.defined_name
# ThisObject,ThatObject
print ThatObject.defined_name
# ThisObject,ThatObject
Так что, если вы должны были использовать этот хак, вы должны иметь в виду, что вы должны вызвать SomeObject() с помощью простой питон заявление:
ThisObject = SomeObject()
Кстати, в качестве еще одного примера использования отслеживающего, если определить
def pv(var):
# stack is a list of 4-tuples: (filename, line number, function name, text)
# see http://docs.python.org/library/traceback.html#module-traceback
#
(filename,line_number,function_name,text)=traceback.extract_stack()[-2]
# ('x_traceback.py', 18, 'f', 'print_var(y)')
print('%s: %s'%(text[text.find('(')+1:-1],var))
то вы можете позвонить
x=3.14
pv(x)
# x: 3.14
для печати имени переменной и ее значения.
зачем вам это нужно? – SilentGhost
Управление информацией о канале в скрипте irc для моей внутренней сети. –
Это странно. Какой язык допускает такую ссылку на переменную времени компиляции во время выполнения? –