如何为Python字典嵌套属性创建动态别名而非仅取值?
解决方案
方案1:极简动态类+Property(一行实现)
直接用type动态创建带property的匿名类实例,每次访问属性时都会重新计算实时值:
# 创建别名实例 money_alias = type('', (), { 'current': property(lambda _: my_dict[long_key_1][long_key_2]['users'][user]['one_more_long_key']['current_money']) })() # 使用时直接访问属性,无需括号 assert money_alias.current == 10
这个写法足够简洁,无需额外类定义,property会保证每次访问money_alias.current时都重新执行lambda表达式,获取最新值。
方案2:可读性优先的极简代理类
如果需要更清晰的命名,可编写一个超短的代理类:
class MoneyAlias: @property def current(self): return my_dict[long_key_1][long_key_2]['users'][user]['one_more_long_key']['current_money'] money_alias = MoneyAlias() # 使用方式 assert money_alias.current == 10
代码量仅几行,远少于你提到的20行,同时可读性更强。
方案3:适配复杂链式调用场景
如果实际场景是类似get_current_money().attribute.method().attribute的链式调用,只需将整个逻辑封装到lambda中即可:
data_alias = type('', (), { 'current_val': property(lambda _: get_current_money().attribute.method().attribute) })() assert data_alias.current_val == 10
同样能实现实时获取最新值的效果。
内容的提问来源于stack exchange,提问作者salius
相关产品推荐
相关产品推荐

