如何让Python类支持vars()方法以动态获取类属性字典?
解决方法
默认情况下,vars(myclass)会返回类的完整__dict__,其中包含__module__、__doc__这类Python自动添加的内置属性。要得到仅包含你自定义属性的字典,且支持动态新增属性时自动包含,最简单的方式是过滤掉双下划线包裹的内置属性:
方式一:即时生成目标字典
直接通过字典推导式过滤vars()的结果,这种方式完全动态,新增类属性后无需修改代码:
class myclass: a_a = "a---a" b_b = "b---b" # 生成仅包含自定义属性的字典 custom_attr_dict = {k: v for k, v in vars(myclass).items() if not (k.startswith('__') and k.endswith('__'))} print(custom_attr_dict) # 输出: {'a_a': 'a---a', 'b_b': 'b---b'}
如果后续给myclass新增属性:
myclass.c_c = "c---c"
再次执行推导式,会自动包含新属性:
print({k: v for k, v in vars(myclass).items() if not (k.startswith('__') and k.endswith('__'))}) # 输出: {'a_a': 'a---a', 'b_b': 'b---b', 'c_c': 'c---c'}
方式二:封装成类方法(更易用)
如果需要频繁获取自定义属性字典,可以给类添加一个类方法,调用更便捷:
class myclass: a_a = "a---a" b_b = "b---b" @classmethod def get_custom_attrs(cls): return {k: v for k, v in vars(cls).items() if not (k.startswith('__') and k.endswith('__'))} # 调用示例 print(myclass.get_custom_attrs()) # 新增属性后直接调用 myclass.d_d = "d---d" print(myclass.get_custom_attrs())
内容的提问来源于stack exchange,提问作者safex
相关产品推荐
相关产品推荐

