You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Python类成员函数内的变量?为何dir()无法获取方法局部变量

问题相关示例

示例代码

class hello:
    cls_var_name='Hello_Class'
    def setdata(self, value):
        self.data=value
        fun1_var_name='Setdata_Function'
    def showdata(self):
        fun2_var_name='Showdata_Function'
        print(self.data)

我们已知借助dir()函数可以列出类的所有属性,但如何列出类的成员函数内部定义的变量/属性呢?

运行演示

>>> dir(hello)
['__doc__', '__module__', 'cls_var_name', 'setdata', 'showdata']
>>>
>>> dir(hello.setdata)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']
>>>
>>> dir(hello.showdata)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__',
 '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']

从上述输出可见,dir(hello)的返回结果中列出了类的相关属性:'cls_var_name', 'setdata', 'showdata'
但dir(hello.setdata)和dir(hello.showdata)的返回结果仅列出了方法相关的内置属性,并未包含方法内部定义的fun1_var_name和fun2_var_name变量。

原因解答
  • 核心是Python的变量作用域和生命周期规则:fun1_var_name、fun2_var_name属于函数局部变量,这类变量不会绑定到类、实例或者函数对象本身作为常驻属性存在。它们只有在函数被实际调用执行时,才会在当前函数的栈帧中临时创建,函数运行结束后就会被销毁回收。
  • dir()函数的作用是查询某个对象当前已经绑定的所有属性和方法。在没有调用对应方法时,这两个局部变量根本还没被创建,自然不会出现在返回结果里。就算你实际调用了方法,这两个变量也只存在于函数运行时的局部作用域中,不会挂载到任何可被dir()遍历的对象上,照样无法通过dir()查到。
  • 可以对比代码里其他两类能被dir()查到的变量,和局部变量有本质区别:
    • 类属性cls_var_name是在类定义阶段就直接绑定到类对象上的,所以类创建完成后立刻就能通过dir(hello)查到
    • 方法内的self.data=value是显式给实例对象绑定属性,只要调用过一次setdata方法,对应实例上就会存在data属性,可以通过dir(实例对象)查到
  • 如果需要在不执行函数的前提下获取函数内部定义的局部变量名,可以访问函数的代码对象属性,比如执行hello.setdata.__code__.co_varnames,就能拿到该方法的所有局部变量名,包括入参self、value和内部定义的fun1_var_name。注意这个方式只能拿到变量的名称字符串,拿不到实际值——毕竟函数没运行的时候,局部变量根本没有分配实际内存空间,也就不存在具体值。

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:48:22