Python通用方案:生成类/对象结构的布尔镜像表示
Python 对象结构布尔镜像生成方案
核心需求
- 生成与原Python类/对象结构完全映射的布尔结构
- 原生单值类型(int、float、str、bool)替换为布尔值,初始设为
True且支持后续修改 - 容器/可迭代对象(列表、字典、嵌套对象等)需递归扫描处理
- 最终结果需为可与原对象直接映射的字典或类实例,作为依赖追踪账本,记录其他函数对原对象成员的依赖情况
实现思路
采用递归遍历逻辑,模仿对象序列化流程:
- 对每个成员判断类型:
- 原生单值类型直接返回
True - 自定义类实例遍历其
__dict__属性(过滤私有属性)生成对应结构 - 容器类型(列表、元组、字典等)递归处理内部元素
- 原生单值类型直接返回
- 优先输出字典格式,兼具易修改、易映射的特性
通用实现代码
def create_boolean_mirror(obj): # 处理原生单值类型 if isinstance(obj, (int, float, str, bool)): return True # 处理列表、元组等序列类型 elif isinstance(obj, (list, tuple)): mirror_type = type(obj) return mirror_type(create_boolean_mirror(item) for item in obj) # 处理字典类型 elif isinstance(obj, dict): return {key: create_boolean_mirror(value) for key, value in obj.items()} # 处理自定义类实例 elif hasattr(obj, '__dict__'): mirror_dict = {} for attr_name, attr_value in obj.__dict__.items(): # 跳过以_开头的私有属性,可按需调整 if not attr_name.startswith('_'): mirror_dict[attr_name] = create_boolean_mirror(attr_value) return mirror_dict # 其他未覆盖类型默认返回True,可按需扩展 else: return True
使用示例
# 定义示例业务类 class User: def __init__(self): self.name = "Alice" self.age = 30 self.is_active = True self.contact = {"email": "alice@example.com", "phone": 123456} self.friends = [{"name": "Bob", "age": 28}, {"name": "Charlie", "age": 32}] # 创建原对象实例 user = User() # 生成布尔镜像 user_mirror = create_boolean_mirror(user) # 输出镜像结构 print(user_mirror)
输出结果
{ 'name': True, 'age': True, 'is_active': True, 'contact': {'email': True, 'phone': True}, 'friends': [{'name': True, 'age': True}, {'name': True, 'age': True}] }
补充建议
- 若需生成类实例而非字典,可基于原类动态创建镜像类,或实例化原类后替换成员值为布尔结构
- 可调整私有属性过滤规则,根据业务需求决定是否纳入镜像
- 支持自定义类型扩展,比如针对
datetime、set等类型添加专属处理逻辑 - 依赖追踪场景下,可在函数调用前后修改镜像中对应成员的布尔值,标记成员是否被访问或修改
内容的提问来源于stack exchange,提问作者Stefan Karlsson
相关产品推荐
相关产品推荐

