当我在Nutshell中阅读Python时,我看到了“类型对象”,“类对象”,“函数对象”,“模块对象”,....
“xxx对象”是指“xxx”类型的实例吗?
例如,
类型对象是否意味着type
类型的实例?例如,int
是一个类型对象吗?是一个特定的类类型对象?
一个类对象是什么意思?特定的类是一个类对象吗?例如,
一个类是一个具有多个特征的Python对象:
•您可以将类对象称为函数。 该调用通常称为实例化,返回一个称为的对象 班级的一个实例;这个类被称为 实例
•一个类可以从其他类继承,这意味着它 委托其他类对象查找属性 在课堂上找不到。
函数对象是否意味着types.FunctionType
的实例?特定函数是函数对象吗?
模块对象是否意味着types.ModuleType
的实例?特定模块是模块对象吗?
有一个int对象吗?如果是,它是否意味着12
类型的整数值(例如int
)?
感谢。
答案 0 :(得分:4)
类型对象是否意味着
type
类型的实例?例如,int
是一个类型对象吗?特定类是类型对象吗?
是的,“type”对象表示“type”类型的对象,ergo是该类型的实例。始终可以使用isinstance
检查有关什么类型的信息。要回答第二个问题,int
是type
类型的对象:
>>> isinstance(int, type) # True
自定义类是否为对象类型:
>>> class Spammy:
... pass
>>> isinstance(Spammy, type)
True
类对象是否意味着什么的实例?特定的类是一个类对象吗?
在Python 2.2中Unification of types and classes之后,类对象的使用可与术语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
答案 1 :(得分:3)
请参阅type()
的文档:
使用一个参数,返回对象的类型。返回值是一个类型对象,通常与
object.__class__
返回的对象相同。建议使用
isinstance()
内置函数来测试对象的类型,因为它需要考虑子类。
让我们看看。 int
是一个类型对象吗?
>>> type(int)
<class 'type'>
一个类对象意味着什么的实例?在Python 3中,类总是new-style classes,因此它们构成了自己的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)
。
答案 2 :(得分:1)
在Python中,您可以将类型表示为对象本身。所以是的,它们是类型对象。对于每种类型,都有一个表示该类型的对象,如int
。它是类型本身的一个实例。
它类似于Java中的.getClass()
和Class<?>
个对象:"some string".getClass() == String.class
。 Java不会将函数视为第一类值,因此存在类似Callable
,Consumer<T>
等类型的函数,但在Python中,函数具有特定类型,并且具有表示该类型的特定对象。 / p>