首页 > 解决方案 > 如何区分用户定义的类和 Python 3 中的内置类?

问题描述

我正在将一些 Python 2 代码移植到 3。有一个部分依赖于了解对象是用户定义类的实例还是内置类。使用的 Python 2 代码:

isinstance(my_object.__class__, Types.ClassType)

python modernize 建议将“Types.ClassType”更改为“type”。这对我不起作用,因为所有对象都返回 true,我们是“类型”。根据我对类和 Python 3 的了解,内置类和用户定义类之间不再有区别。我已经做了几乎一整天的研究,却一无所获。我不敢相信我是这种情况下唯一的人,但也许我没有寻找正确的短语......

所以我的问题是,是否可以区分,或者我是否需要重构代码以便无关紧要?

标签: pythonpython-3.xclasstypes

解决方案


您可能误解了上下文。该检查不适用于检测用户定义的类或内置类之间的差异。这是检测旧式类之间的差异:

class A:
    pass

和新型类:

class B(object):
    pass

在 Python 3+ 中,不再有任何旧式类,一切都继承自object您是否要求。因此,您将需要重写或删除任何针对旧式类的特殊代码。

相关阅读:Python 中的旧样式类和新样式类有什么区别?


推荐阅读