Python 中的类与类型

问题描述 投票:0回答:3

我最近才开始自学如何编码。我目前正在阅读 Think Python 2 for python 3 ,当它介绍

type()
函数时,它给出了输出
type(2)
的示例
<class 'int'>
。然后它指出“‘类’这个词是在类别的意义上使用的;类型是值的类别。”

令我困惑的部分是

type()
函数输出类而不是类型。另外,我不确定类型和类之间的区别;是“值”类型的字符串、浮点和整数类,还是相同的东西?

python python-3.x
3个回答
47
投票

曾几何时,Python 同时拥有类型。类型是用 C 语言定义的内置对象;类是您使用

class
语句时构建的内容。两者的名称不同,因为你不能将它们混为一谈。类无法扩展类型。

这种差异是人为的,是语言实现的限制。 从Python 2.2开始,Python的开发者慢慢地朝着统一这两个概念的方向发展,在Python 3中差异几乎消失了。内置类型现在也被标记为类,你可以随意扩展它们。

你的书试图解释 Python 中不再存在的差异。即使在 Python 2 中,差异也仅存在于名称中,因为

type(2)
显示此处仍然使用“类型”一词:

>>> type(2)
<type 'int'>

但是您可以像任何其他类一样对

int
进行子类化。

(Python 2 仍然有旧式类,那些不继承自

object
的类;这些是统一之前旧系统的残余。)


6
投票

Python的层次结构是类型(元类)->类->实例。 将函数

type()
视为上升一级。

如果您在

type()
(任何整数)的实例上使用函数
int
,如下所示:
type(123)
您将收到实例的类,在本例中为
int
。如果您在类
type()
上使用
int
,您将收到
type type
,它是 int 的元类。

请记住,元类是 Python 的高级技术细节,您不需要首先了解它们。


1
投票

如果您刚刚开始学习编程,请记住术语“类型”和“类”的含义非常多(在不同的上下文中有时用于不同的事物,有时用于同义词)。粗略地说,你有...

  • 类型的抽象概念。这是程序运行时不存在的东西,但类型检查器(或您)可以用来识别对象的无效使用
  • 在包括 Python 在内的许多语言中,都有 typesruntime 表示。使用这些表示来改变运行时行为称为“反射”。
  • 然后有课程。因此,通常 (在数学中),type 仅指数据的结构(即字段及其类型)。在面向对象编程中,通常需要将某些函数的定义保留在类的定义中,以强制执行“数据隐藏”。不管怎样,最终的结果是我们可以将 class 概念化为一种“type McMenu”。你会得到一个类型数据结构)、接口(公共方法)和构造函数(通常由一些特殊的语法或约定给出 - 例如
    __init__
    )。
  • 最后,请记住,表达式有 staticdynamic 类型。这里与程序员相关的区别是“虚拟函数”的概念。这些在 Python 中并不令人印象深刻,但在 C++ 和 C# 等强类型语言中,这相当强大且有用。
© www.soinside.com 2019 - 2024. All rights reserved.