【问题标题】:Is "type" a function or class?“类型”是函数还是类?
【发布时间】:2020-05-31 19:16:21
【问题描述】:

我对@9​​87654323@ 有点困惑,因为它列在Python documentation 的内置函数中。

但是,当我运行 type(type)type.__dict__ 时,它看起来更像是一个可调用的类。除此之外,调用isinstance(type, type) 会返回True。怎么回事?

【问题讨论】:

  • 在 CPython(从 python.org 下载的 Python 的参考实现)中,type 只是 PyType_Type 实例的一个对象,由解释器自动填充到内置命名空间中。您可以在 CPython 源代码中找到它的定义,例如bltinmodule.
  • 我不知道为什么这个问题被关闭了。这是一个关于type 究竟是什么的非常具体问题,因为它的行为类似于对象,但也类似于类对象,因为它是自身的一个实例。
  • @Brian 对初始标题的反应..

标签: python function class object types


【解决方案1】:

我没有评论的声誉, 请参考以下问题: The built-in keyword type means a function or a class in python?

【讨论】:

    【解决方案2】:

    type 是一种类型。它是其他内置类型(包括自身)的元类

    >>> type(int)
    <class 'type'>
    >>> type(type)
    <class 'type'>
    

    以及用户定义类型的默认元类:

    >>> class A: pass
    ...
    >>> type(A)
    <class 'type'>
    

    当使用一个参数调用时(如前面的示例),它返回其参数的类型。当使用三个参数(名称、基类元组和dict)调用时,它会返回type 的新实例,正如调用类型时所期望的那样。

    >>> B = type('B', (A,), {'x': 3})
    >>> type(B)
    <class 'type'>
    >>> B.x
    3
    

    事实上,class 语句是调用type 的声明性语法。前面的等价于

    class B(A):
        x = 3    
    

    【讨论】:

      【解决方案3】:

      type 是一个类,也就是一个类型——尽管typing 模块引入了一个单独的、略微不兼容的“类型”一词的用法,但这些术语在 Python 3 中大部分是等价的。

      它记录在“内置函数”下,因为这是最清楚地记录当您像函数一样调用它时它所做的事情的地方。那里记录了很多类型。如果您查看页面顶部,您会看到

      Python 解释器内置了许多函数和类型,这些函数始终可用。它们在此处按字母顺序列出。

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 2023-04-01
        • 1970-01-01
        • 2018-04-10
        • 2010-10-05
        • 1970-01-01
        • 2012-08-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多