gpt4 book ai didi

python - 在 Python 中跟踪数据类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:05 26 4
gpt4 key购买 nike

所以我希望这是一个有效的问题...我最近(实际上是今天)决定学习一种脚本语言,所以我选择了 Python。在浏览代码时,我感到不知所措,我很快意识到原因是我不知道什么数据类型转换等等。

我的问题是:是否有任何跟踪数据类型的约定?我更多来自 C 背景,所以我觉得这很令人困惑。有什么建议吗?

最佳答案

正常的 Python 方法是 duck typing —— 来自古老的短语“如果它叫起来像鸭子,走路像鸭子,那么它对我来说就足够了”。

在特殊情况下,您确实必须检查某物的类型(对其他相似类型做不同的事情……通常不是一个好主意),这就是isinstance是为了。

isinstance 曾经被认为是最后一搏的措施,对过度使用它有严重的警告......但是虽然那个经典长篇大论的要点仍然有效,但自 Python 2.6 以来它已经获得了一个重要的附带条件:虽然检查某物是否是特定具体类的实例仍然属于“很少是一个好主意”类别,但检查它是否是 abstract base class 的实例(又名 ABC)是一个更常用的想法,因为它只是提供了一种很好且灵活的方法来检查某物是否实现了某个接口(interface)。

例如,要检查一个对象是否可调用,过去必须执行如下操作:

if hasattr(type(obj), '__call__'): ...

从 2.6 开始,首选的替代方案变成了:

import collections
if isinstance(obj, collections.Callable): ...

更直接、更清晰。更丰富的 ABC,例如 collections.MutableSequence,这意味着许多不同方法的存在和协调,使它呈指数级增长。

检查(使用 isinstance)具体类型中的成员资格并不是很好,而检查 ABC 中的成员资格通常更有用,这一事实在于“Gang of 4”在他们精彩的书“设计模式”的第一部分(主要是在 C++ 环境中,但它的实际应用范围远不止于此!)中清晰而强烈地表达了:针对接口(interface)编程,而不是针对实现.

检查具体类的成员身份表明您可能对某个实现进行了编程;使用 ABC,您基本上是在检查接口(interface),所以很多问题不再是大问题(ABC 不仅仅是接口(interface)——它们还可以为它们的具体子类提供“实现帮助”——但是,当我们在谈论 isinstance 时,将它们视为接口(interface)可能是最有帮助的立场)。

关于python - 在 Python 中跟踪数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com