如何在Python类中实现类似globals()[]的动态变量访问功能?
动态访问类实例属性的实现方法
你原本的globals()方法只能读取当前模块全局作用域下的变量,类的实例属性绑定在self对象上,不属于全局变量,因此无法匹配到结果。只需要将全局变量读取逻辑替换为实例属性读取逻辑即可实现需求,最推荐使用Python内置的getattr()方法实现,修改后的完整代码如下:
class boolean_func(): def __init__(self): self.boolean_0 = True self.boolean_1 = False def check_status(self): no = 0 while no < 2: # 替换原有globals()调用,从self实例中读取对应属性 if getattr(self, f'boolean_{no}'): print(f'Boolean {no}', 'is True') else: print(f'Boolean {no}', 'is False') no += 1 # 测试代码 if __name__ == "__main__": obj = boolean_func() obj.check_status()
可选实现方案说明
- 使用
getattr()是官方推荐的动态属性访问方案,还支持传入默认值处理属性不存在的场景,写法为getattr(self, 属性名, 默认返回值),如果对应属性不存在会直接返回你设置的默认值,不会抛出异常。 - 也可以直接访问实例的属性字典
self.__dict__获取值,写法为self.__dict__[f'boolean_{no}'],该写法没有默认值容错能力,属性不存在时会直接抛出KeyError异常。
内容的提问来源于stack exchange,提问作者progress456
相关产品推荐
相关产品推荐

