类型和类之间有什么区别吗?

时间:2014-06-17 17:16:28

标签: python python-3.x python-2.x

我正在读一本Python书,它总是说“给定X的类型是Y”,所以我很困惑。

在python2和python3中询问对象的类型和对象成员资格的之间有什么区别吗?

我的意思是,类型和类别有两个不同的概念吗?

这个问题来自这样一个事实:在2.1之前的蟒蛇中,调用x.__class__type(x)之间存在差异。

2 个答案:

答案 0 :(得分:4)

在Python 2.2之前,“[经典]类”和“[内置]类型”之间的区别。

基本上,你不能对内置类型进行子类化,并且它们具有其他特殊行为,这使得它们与用户定义的类不同。

来自Python创建者Guido van Rossum的

This blog post解释了在“新式类”框架下统一用户定义类和内置类型的一些动机。

Python wiki在the practical differences between the classic and new-style user-defined classes上也有一些很好的背景。

tl; dr:在Python 2.7中,您仍然可以创建一个“经典类”,以实现向后兼容性,但内置类型的行为类似于新式类。

答案 1 :(得分:2)

不,类型和类意味着相同。

虽然内置类型和C扩展(完全是解释器扩展,如Jython中的Java类)可能会有所不同,例如,您可能无法对其进行修补。在旧版本的CPython中,还有一个子类化内置函数的问题,但是很久以前,我只读过它,并没有看到“在行动中”。

此外,Python2中的旧式和新式类存在差异,但在这种情况下它并不重要。

最后有许多“类型的类型”,但名称“class”和“type”是等价的。仍然 - “类型”更常用于内置,而类 - 不常见。对于not-builtins,这两个名字都很常见。