Python中的类与类型

Jef*_*eff 12 python python-3.x

我刚刚开始自学如何编码.我目前正在阅读Think Python 2 for python 3,当它教授该type()函数时,它给出了type(2)输出的示例<class 'int'>.然后它声明"在类别意义上使用'类'一词;类型是一类价值."

困惑我的部分是type()函数输出类而不是类型.另外,我不确定类型和类之间的区别; 是字符串,浮点和"值"类型的整数类,还是它们是相同的东西?

我已经看了这个,但是找不到我的具体问题的答案,或者我找不到简单的理解.

Mar*_*ers 16

曾几何时,Python有类型.类型是C中定义的内置对象; 类是你在使用class语句时构建的.这两个人的名字不同,因为你不能混合这些; 类无法扩展类型.

这种差异是人为的,是语言实现的限制.从Python 2.2开始,Python的开发人员慢慢地朝着统一这两个概念的方向发展,差别在于Python 3中的内容.内置类型现在也被标记为类,您可以随意扩展它们.

你的书试图解释Python中不存在的差异.即使在Python 2中,差异仅存在于名称中,因为type(2)显示"类型"一词仍然在那里使用:

>>> type(2)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

但你可以int像任何其他类一样继承子类.

(Python 2仍然具有旧式类,那些不继承的类object;这些是统一之前旧系统的残余.)


Bha*_*rel 6

python的层次结构是类型(元类)->类->实例。将该功能type()视为向上一级。

如果您像这样type()int(任何整数)的实例上使用该函数:type(123)您将收到实例的类,在这种情况下是int. 如果您将type()在 class 上使用int,您将收到type type哪个是 int 的元类。

请记住,元类是 Python 的高级技术细节,您无需一开始就了解它们。

  • 有问题的文本没有引用元类。`type` 是一个元类,是的,但是 `type(someobject)` 不返回元类,它返回该对象的类。我担心,将元类引入这只会进一步混淆问题。 (5认同)
  • 确实,它没有引用元类,但请记住,如果对象本身是一个类,则 type(obj) 确实会返回对象的元类。我同意,这会引起一些混乱,这就是为什么我写道它更先进,但解决方案更完整,就像我相信的那样。 (2认同)
  • 是的,然后还有 `type(type)` 等的乐趣。但这就是 * 太多信息 * 与问题 * 类和类型 * 之间有什么区别 * 无关? (2认同)