python-3.x “type”真的是一个函数吗?

sqserrrh  于 2023-06-25  发布在  Python
关注(0)|答案(4)|浏览(134)

首先,如果我问了一些愚蠢的问题,我很抱歉,因为我是Python的新手。
我在阅读http://docs.python.org/3.1/reference/datamodel.html#objects-values-and-types时看到了这句话:
函数的作用是:返回一个对象的类型(即对象本身)
当然,我决定检查一下:

>>> def someFunction(x):
...     return x * x
...     
>>> type(someFunction)
<class 'function'>
>>> type(type)
<class 'type'>

所以,看起来函数的类型是function,但是为什么type函数如果是一个函数,它的类型就不同了呢?或者医生们在撒谎,这不是一个真正的功能?

3zwtqj6y

3zwtqj6y1#

是的,type是一个函数,但它是用C实现的。
它也必须**是它自己的类型,否则你不能做:

>>> def foo(): pass
... 
>>> type(foo)
<type 'function'>
>>> type(type)
<type 'type'>
>>> isinstance(type(foo), type)
True

例如,如果type的类型不是type而是function,则无法测试类型是否为类型。还和我在一起吗
从技术上讲,type是一个可调用对象,它有两个相关的角色。它是一个元类(一个类工厂),也是Python中所有类型的基础,当被调用时,它会产生一个type示例(<type 'function'>type类型的示例)。
这同样适用于所有类型(包括类);调用它们,它们会生成给定类型的新示例。

w1jd8yoj

w1jd8yoj2#

1.注意,在Python中任何东西都是对象。对象可以是可调用的,即作为功能工作。

  1. type是内置的函数,即可以作为函数调用的类型的对象。您可以使用一个参数调用它来获取对象的类型。但还有另一个用例。
  2. type是一个元类,这意味着它本身是一个类型,可以创建类(也是对象)。
    1.所有类(以及元类)都是可调用的,这也是为什么type是函数的另一个原因。你可以用三个参数调用它来创建一个类。
  3. type是基本的内置元类。所以它是Python中任何东西的**基础。因为type位于类型层次结构的顶部,所以type(type)返回type,即type是自己的类型。
    你可能也想知道:
o0lyfsai

o0lyfsai3#

type是一个处理类对象的类。使用对象调用它只是使用它的一种方式。您也可以使用它来创建 meta类。
比如说,

>>> MyMetaClass = type("MyMetaClass", (object,), {'foo': 'bar'})
>>> newmeta = MyMetaClass()
>>> newmeta.foo
'bar'
>>> type(MyMetaClass)
<type 'type'>
>>> type(newmeta)
<class '__main__.MyMetaClass'>
83qze16e

83qze16e4#

你应该先了解一些概念:

  1. Python中的一切都是对象。Python中创建的每个对象都是从父类“type”继承的,称为元类。元类是Python世界中所有对象的父类。那么,既然Python中的所有东西都是对象,那么“type”元类的类型是什么呢?只有“类型”。'type'对象是self类型。
    1.现在'type()'是一个函数,'type'是一个对象。
    类XYZ:传递打印(类型(XYZ))
    输出:<class 'type'>

相关问题