如何在 Python 3 中准确比较对象类型?



在Python 2代码中,我有这样的东西:

...
elif type(value) == datetime.date:
return transform_date(value)
elif type(value) == datetime.datetime:
return transform_datetime(value)
...

现在,如果我遵循避免"反模式"的建议,我应该用isinstance替换它。

isinstance(value, datetime.date)

并且会出现一个问题,因为正确性将取决于我首先检查哪种类型。

我很清楚 10 多岁 如何在 Python 中比较对象的类型? 以及 在 Python 中检查类型的规范方法是什么? ,但这个问题在两个重要方面有所不同:

  1. 这是关于Python 3的,习语可能有所不同
  2. 我对精确检查感兴趣,因为转换取决于确切的类型(否则会有损(

完全匹配:例如,obj.__class__type(obj)匹配。

就像在Python中一样,只有一种明显的方法可以做到这一点,这个问题的答案不应该那么依赖于意见。

如果你真的想要严格的每精确类匹配,pythonic 解决方案自 py2 以来没有改变: 使用字典

dispatch = {
datetime.date: transform_date,
datetime.datetime: transform_datetime,
# etc
}
transform = dispatch.get(type(value), some_default_func)
transform(value)

相关内容

  • 没有找到相关文章

最新更新