【发布时间】:2018-02-13 20:59:47
【问题描述】:
我经常看到这种模式以容错方式浏览字典:
a.get('k1', {}).get('k2', {}).get('k3', '')
但是,如果中间对象是类实例而不是字典,则这是不可能的。是否有一种简洁的方法来执行(类似)以下操作:
a?.method1()?.method2()?.method3()...
扩展到:
if a is None:
return None
obj = a.method1()
if obj is None:
return None
obj = obj.method2()
if obj is None:
return None
obj = obj.method3()
return obj
我猜想可能有一些构建器模式的变体,但如果上述方法位于不受用户控制的 API 中,这将是不可行的。
【问题讨论】:
-
您可能对我对另一个类似问题here 的回答感兴趣。虽然它使用自定义字典实现。
-
@Skam 也许,但在这种情况下,查询不能是键字符串的简单可迭代;它必须是 lambdas 的可迭代对象。
-
你需要一个“也许”的单子
标签: python python-3.x nonetype