我有以下代码:
tic toc
我应该在class A:
def m(self):
print(...) # 'my_var' should be printed
my_var = A()
my_var.m()
内输入什么代码来输出创建的变量的名称?我需要一个Python 3的解决方案。
答案 0 :(得分: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