我正在读一本Python书,它总是说“给定X的类型是Y”,所以我很困惑。
在python2和python3中询问对象的类型和对象成员资格的类之间有什么区别吗?
我的意思是,类型和类别有两个不同的概念吗?
这个问题来自这样一个事实:在2.1之前的蟒蛇中,调用x.__class__
和type(x)
之间存在差异。
答案 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,这两个名字都很常见。