通过“自我”获取变量的名称。在Python的类方法内部

时间:2017-04-20 15:06:08

标签: python python-3.x

我有以下代码:

tic toc

我应该在class A: def m(self): print(...) # 'my_var' should be printed my_var = A() my_var.m() 内输入什么代码来输出创建的变量的名称?我需要一个Python 3的解决方案。

1 个答案:

答案 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