Имам следния код:
class A:
def m(self):
print(...) # "my_var" should be printed
my_var = A()
my_var.m()
Какъв код трябва да напиша вътре m
да изведе името на създадената променлива? Имам нужда от решение за Python 3.
Отговори:
1 за отговор № 1Обектите не знаят какви променливи в пространството на имена иматда бъдат обвързани в даден момент. Такива променливи имат препратка към обекта, но обектът не поддържа задна препратка към потенциално много променливи. Импортираните модули са изброени в sys.modules
и можете да сканирате тези за вашия обект. Това би уловило променливи на ниво модул, но не и всяко пространство за имена на контейнер, клас, клас или локална функция, което се случва да съдържа и променливата.
test1.py - Осъществява клас, който сканира за себе си в известни модули
import sys
class A:
def m(self):
for name, module in sys.modules.items():
try:
for varname, obj in module.__dict__.items():
if obj is self:
print("{}.{}".format(name, varname))
except AttributeError:
pass
a = A()
test2.py - тества кода
import test1
my_a = test1.a
my_a.m()
изпълнявайки кода
$ python3 test2.py
__main__.my_a
test1.a