【问题标题】:Class vs. Type in PythonPython 中的类与类型
【发布时间】:2016-06-27 19:18:29
【问题描述】:

我最近才开始自学如何编码。我目前正在阅读Think Python 2 for python 3,当它教授type() 函数时,它给出了输出<class 'int'> 的示例type(2)。然后它指出“‘类’这个词是在一个类别的意义上使用的;一个类型是一个值的类别。”

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

我已经查过了,但找不到具体问题的答案,也找不到简单到让我理解的答案。

【问题讨论】:

  • Python 3 完成了类型和类的统一(其中started way back with Python 2.2)。您的书试图解释一个不再存在的差异。
  • 基本上类型是继承自object 的类。在 Python3 中,所有的类都继承自 object,所以它们是同一个东西。
  • @zondo:这也不太准确。它是相关的,但这不是我要使用的分类。
  • 也许可以再找一本书...
  • @RickTeachey,那你会推荐什么书?

标签: python python-3.x


【解决方案1】:

曾几何时,Python 有 typesclasses。类型是 C 中定义的内置对象;类是您在使用 class 语句时构建的。两者的名称不同,因为您不能将它们混合使用;类不能扩展类型。

这种差异是人为的,是语言实现的限制。 Starting with Python 2.2,Python 的开发者已经慢慢走向统一这两个概念,在 Python 3 中几乎没有区别。内置类型现在也被标记为类,您可以随意扩展它们。

您的书试图解释 Python 中不再存在的差异。即使在 Python 2 中,区别也仅存在于名称上,因为 type(2) 显示该词仍然在此处使用“类型”:

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

但您可以像任何其他类一样子类化 int

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

【讨论】:

  • 您能否详细说明“在 C 中定义”是什么意思?所以在 Python 2 中,类型是整数,类是 2?
  • @Jeff:对于 CPython(您从 python.org 下载的默认 Python 实现),int 类型的实现是在 C 代码中完成的,而不是在 Python 代码中用户创建的类.
  • @Jeff: 2int 类型的实例。那里不涉及任何课程。但是class Foo: pass 定义了一个用户定义的类对象。 Foo() 将是该类的一个实例。
  • @Jeff:基本上,typeclass 这两个术语是可以互换的,但在较旧的 Python 版本中仍然存在区别,因为您不能将两者混合使用。
  • @Jeff:在 typeclass 上更正。我指的是C programming language。 C# 和 C++ 都以 C 命名(并且都大量借鉴了该语言作为自己设计的基础)。
【解决方案2】:

python 层次结构是类型(元类)-> 类-> 实例。 将函数 type() 想象为上一级。

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

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

【讨论】:

  • 有问题的文本没有引用元类。 type 是一个元类,是的,但是type(someobject) 不返回元类,它返回该对象的类。我担心,将元类带入其中只会进一步混淆问题。
  • 确实它没有引用元类,但请记住 type(obj) 确实返回对象的元类,以防对象本身就是一个类。我同意这会引起一些混乱,这就是为什么我写它更先进但解决方案更完整,就像我相信的那样。
  • 是的,然后还有type(type) 等的乐趣。但这只是太多信息,与问题什么是无关的类和类型的区别?
  • 好的,感谢您的意见,下次会更加小心:-)
猜你喜欢
  • 2012-11-11
  • 2013-08-04
  • 2011-04-22
  • 1970-01-01
  • 2017-02-24
  • 2020-01-11
  • 2018-01-21
  • 2011-05-27
  • 2018-05-20
相关资源
最近更新 更多