【发布时间】:2017-12-17 10:58:41
【问题描述】:
我正在阅读一本关于 Python 的教科书,它涵盖了新型类差异。在使用经典类的解释器中观察 Python 2.X 中的以下代码:
class C: pass
X = C()
isinstance(X, object) #returns true
isinstance(C, object) #returns true
(要使用新型类,必须显式从 2.X 中的对象类派生)
那么一个不从对象类派生的对象(如在经典类中的情况)如何成为对象的实例呢?在 3.X 和 2.X 的情况下,幕后发生了什么?
至于这是否是一个重复的问题:我已经知道从技术上讲一切都是一个对象,我想知道在 python 本身的设计中如何明确处理差异,而不是将 isinstance 的结果视为理所当然。
【问题讨论】:
-
Everything 是一个对象。
isinstance(object, object)也是如此。 -
更有用的检查是
isinstance(C, type),或issubclass(C, object)。
标签: python-2.7 python-3.x types new-style-class