"a type/class/function/module/... object"的含义 ?



当我阅读Python时,我看到了一个"类型对象","类对象","函数对象","模块对象",....

"xxx 对象"是否表示类型为"xxx"的实例?

例如

  • 类型对象是否表示类型type的实例?例如,int是类型对象吗?特定类是类型对象吗?

  • 类对象是否意味着什么的实例?特定类是类对象吗?例如

    类是具有以下几个特征的 Python 对象:

    • 您可以像调用函数一样调用类对象。 该调用(通常称为实例化(返回一个称为 类的实例;该类称为 实例。

    • 一个类可以从其他类继承,这意味着它 将属性的查找委托给其他类对象在类本身中找不到。

  • 函数对象是否意味着types.FunctionType的实例?特定函数是函数对象吗?

  • 模块对象是否表示types.ModuleType的实例?特定模块是模块对象吗?

  • 有 int 对象吗?如果是,是否意味着整数值(例如12( 类型int

谢谢。

类型对象是否表示类型type的实例?例如,int是类型对象吗?Ι 特定类是类型对象吗?

是的,"类型">

对象是指类型为"type"的对象,因此是该类型的实例。有关某物是什么类型的信息始终可以通过isinstance进行检查。要回答您的第二个问题,inttype类型的对象:

>>> isinstance(int, type) # True

是自定义类类型对象:

>>> class Spammy: 
...     pass
>>> isinstance(Spammy, type)
True

类对象是否意味着什么的实例?特定类是类对象吗?

类对象的使用可以在 Python 2.2 中统一类型和类之后与术语type对象互换。术语"类"主要用于指代用户定义的类(使用class语句创建的类(,但它实际上意味着同样的事情。

确实在具有旧式类的Python 2中有所不同。不从类定义中的对象继承给出了类型为classobj的对象:

>>> class Foo:
...     pass
>>> type(Foo)
<type 'classobj'>

这在 Python 3 中不存在,其中所有类都是type类型的对象。

函数对象是否表示types.FunctionType的实例?特定函数是函数对象吗?

模块对象是否表示types.ModuleType的实例?特定模块是模块对象吗?

对所有这些是的:

>>> def foo(): pass
>>> type(foo)  
function 
>>> import collections    
>>> type(collections)
module

有没有int对象?如果是,是否意味着整数值(例如12( 类型int

有一个int类型,它是一个类型对象和一个int对象,它是一个类型为int的对象。这方面的一个例子是12,因为:

>>> type(12)
int 

同时,int产生同样的事情:

>>> type(int)
type

请参阅type()的文档:

使用一个参数返回对象的类型。返回值是一个类型对象,通常与object.__class__返回的对象相同。

建议使用isinstance()内置函数来测试对象的类型,因为它考虑了子类。

我看看。int是类型对象吗?

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

类对象意味着什么的实例?在 Python 3 中,类始终是新式类,因此它们构成了自身的type

>>> class X:
...     pass
... 
>>> y = X()
>>> type(y)
<class '__main__.X'>

但是对于Python 2.x的旧式类:

>>> class X:
...     pass
... 
>>> y = X()
>>> type(y)
<type 'instance'>
>>> type(X)
<type 'classobj'>

在这里,类有types.ClassType,实例有types.InstanceType(两者在Python 3.x中都不存在(

函数对象是一个types.FunctionType

>>> def foo():
...    return 42
>>> type(foo) is types.FunctionType
True
>>> type(lambda x: x + 2) is types.FunctionType
True

模块对象是一个types.ModuleType

>>> import sys
>>> type(sys) is types.ModuleType
True

是的,有int对象。考虑type(12).

在 Python 中,你可以将类型表示为对象本身。 所以是的,它们是类型对象。 对于每种类型,都有一个表示该类型的对象,例如int。 它是类型本身的实例。

这就像 Java 中的.getClass()Class<?>对象:"some string".getClass() == String.class。 Java不将函数视为第一类值,因此有CallableConsumer<T>等类型,但是在Python中,函数有一个特定的类型,并且有一个特定的对象表示该类型。

相关内容

最新更新