【Python】type(obj) vs.__class__和改变一个对象的类

Python有两种访问对象类型的方式。

一种是使用type(obj),另一种是使用obj.__class__。它们之间有什么区别呢?

在这个视频中,我们看到它们大多数情况下是相同的(你可能不需要太担心),但是有一个区别在于类有可能通过拦截对__class__的访问来欺骗自己的类型。

而内置的type函数则总是会给出对象的真实类型。

然而,如果一个类试图欺骗自己的类型,可能是因为它有一个合理的理由,这意味着你可能更倾向于使用__class__。

另外,还可以在对象创建后在运行时修改对象的__class__,这将真正改变对象的类型,使得type(obj)和obj.__class__都报告新的类型。

这里有一些限制(使用案例有些可疑!),但是知道这一点是好的,以防你觉得有些奇怪的事情发生了

源地址:https://youtu.be/5vpdzRbfTIM

【Python】抽象基类介绍可逆字典的应用

顺便说一下,这是抽象基类。Python 提供了一组标准接口,用于定义广泛使用的抽象集合。

它们在 collections.abc 模块中提供,并可用于类型提示、运行时接口检查,以及用作基类来定义许多接口函数,仅基于几个函数的实现。

例如,如果您定义了 getitem_、iter 和 len_,那么 Python 可以通过使用您提供的函数自动定义 Mapping 接口的其余函数 contains、keys、items、values、get、eq 和 ne。 我们通过实现一个可逆字典类来演示抽象集合,该类是一个 MutableMapping。

源地址:https://youtu.be/oUt1feRoyvI