如何在Databricks外部Notebook查看Python类私有变量运行时值?
解决Databricks中查看Python类私有变量值的问题
首先纠正你示例代码里的几个关键问题,否则代码无法正常运行:
- 类内部的方法必须携带
self参数,比如testfunc应定义为def testfunc(self): - 你实例化
wrapperfunction时传入了参数'testing',但类中未定义__init__方法接收该参数
回到查看私有变量的核心问题:Python中以__开头的私有变量会被名称修饰,实际存储的变量名会变成_类名__变量名格式,比如你的__testvalue在wrapperfunction类中会被处理为_wrapperfunction__testvalue,因此直接用vars(my_obj)无法获取到。
以下是几种实用的调试查看方法:
方法1:直接访问修饰后的变量名
先通过dir(my_obj)查看对象的所有属性,找到修饰后的变量名,再直接访问:my_obj = wrapperfunction('testing') my_obj.testfunc() # 必须先调用赋值私有变量的方法 print(my_obj._wrapperfunction__testvalue)方法2:在类中添加调试专用方法
在类内新增一个返回私有变量的方法,方便调试时调用:class wrapperfunction(): def __init__(self, param): self.param = param def testfunc(self): self.__testvalue = 123 # 调试用方法,仅用于查看私有变量 def debug_get_testvalue(self): return self.__testvalue主Notebook中调用:
my_obj = wrapperfunction('testing') my_obj.testfunc() print(my_obj.debug_get_testvalue())方法3:通过
__dict__查看所有实例属性
对象的__dict__属性会包含所有实例属性,包括被修饰后的私有变量:my_obj = wrapperfunction('testing') my_obj.testfunc() print(my_obj.__dict__) # 输出示例:{'param': 'testing', '_wrapperfunction__testvalue': 123}方法4:临时修改变量名(仅调试阶段使用)
调试期间可将__testvalue改为_testvalue(单下划线,Python约定的保护变量),这样直接通过my_obj._testvalue或vars(my_obj)就能访问,调试完成后再改回双下划线。
注意:必须先调用赋值私有变量的方法(比如testfunc()),否则变量尚未被创建,自然无法获取到值。
内容的提问来源于stack exchange,提问作者Pysparker
相关产品推荐
相关产品推荐

