栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python 3:对象如何成为类型的实例?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 3:对象如何成为类型的实例?

这是Python中的一种极端情况:

  • Python中的所有内容都是一个对象,因此,由于所有
    object
    内容的基本类型都是
    type
    (在Python中是某种东西)是的实例
    object
  • 因为
    object
    是所有内容的基本 类型 ,所以
    object
    它也是 类型 ,它是
    object
    的实例
    type

请注意,您无法在Python中用自己的 东西 复制这种关系。这是语言中内置的一个例外。


在实现方面,这两个名称分别由

PybaseObject_Type
(for
object
)和
PyType_Type
(for
type
)表示。

当您使用时

isinstance
,类型检查(在其他所有步骤均失败之后的最后一步)是通过
type_is_subtype_base_chain
以下方式完成的:

type_is_subtype_base_chain(PyTypeObject *a, PyTypeObject *b){    do {        if (a == b) return 1;        a = a->tp_base;    } while (a != NULL);    return (b == &PybaseObject_Type);}

从本质上讲,这会继续提高的类型层次结构,

a
并对照来检查结果类型
b
。如果找不到,则最后的方法是检查在这种情况下函数是否
b
真的
object
返回true:因为所有内容都是对象。因此,“一切都是实例
object
”部分实际上已硬编码到实例检查中。

至于为什么

object
是a
type
,这实际上甚至更简单,因为它是在声明中以
PybaseObject_Type
这种方式定义的:

PyTypeObject PybaseObject_Type = {    PyVarObject_HEAD_INIT(&PyType_Type, 0)    "object",      sizeof(PyObject),         …

PyVarObject_HEAD_INIT
本质上设置核心类型信息的东西,包括基本类型,这是
PyType_Type

这种关系实际上还有两个后果:

  • 由于一切都是对象,因此
    object
    它也是的一个实例
    object
    isinstance(object, object)
  • 由于
    PyType_Type
    也与实施相同
    PyVarObject_HEAD_INIT
    type
    也是一种:
    isinstance(type, type)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610810.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号