当前位置: 首页 > 面试题库 >

为什么“对象”是“类型”的实例,而“类型”是“对象”的实例?

鲜于煜祺
2023-03-14
问题内容

我对Python 3中的objecttype类有些困惑。也许有人可以消除我的困惑或提供一些其他信息。

我目前的理解是,每个类(除外object)都从称为的基类继承object。但是每个类(包括object)也是该类的type一个实例,它是自身的实例,object并且也从继承object

我的问题是:

  • 是否有一个原因/设计决策,为什么object是的实例typetype从中继承objecttype对象的/ class是否也可以是对象本身?

  • 类(type)如何成为其自身的实例?

  • 哪一个是真正的基类objecttype
    我一直认为object这将是最“基础”的类,但它似乎是的实例type,这是的实例object,是的实例type,…递归在哪里结束?

  • 是否有可能说明objecttype类之间的关系?

我尝试查找Python标准库文档中的object和的条目type

每个类(对象除外)都从对象继承。

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__bases__}')
... 
object: ()
int   : (<class 'object'>,)
float : (<class 'object'>,)
str   : (<class 'object'>,)
list  : (<class 'object'>,)
dict  : (<class 'object'>,)

每个类都是该类的一个实例type

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__class__}')
... 
object: <class 'type'>
int   : <class 'type'>
float : <class 'type'>
str   : <class 'type'>
list  : <class 'type'>
dict  : <class 'type'>

type 是它本身的一个实例。

>>> type.__class__
<class 'type'>

type也继承自object

>>> type.__bases__
(<class 'object'>,)

>>> isinstance(object, type)
True
>>> isinstance(type, object)
True
>>> isinstance(type, type)
True
>>> isinstance(object, object)
True



>>> issubclass(type, object)
True
>>> issubclass(object, type)
False

问题答案:

您可以在本书中找到所有问题的答案:Python类型和对象

回答问题最重要的部分: * 对象的类型/类是否也是对象本身?
是的,根据第一章的规则1:
“一切都是物体。。。我们定义的任何类都是对象,并且
当然,这些类的实例也是对象。” * 哪个是真正的基类“object”还是“type”?
第二章:
“这两个对象是Python中的基本对象。我们还不如
一次介绍一个,但那会导致鸡和蛋
问题-先介绍哪个?这两个物体是相互依存的-
它们不能独立存在,因为它们是以彼此为定义的。”
卢西亚诺·拉马略在他的《流畅的蟒蛇》一书中也说,这种关系是不可能的
用Python表示(第21章):
“类对象和类型具有唯一的关系:对象是一个实例
类型的子类,而类型是object的子类。这种关系是“魔法”:它
不能用Python表示,因为任何一个类都必须在
另一个可以定义。类型本身就是一个实例的事实是
也很神奇。”
所以,对于你的问题: * 类(类型)如何成为自身的实例?
Luciano说它不能用Python来表达。 * 有没有可能说明对象和类型类之间的关系?



 类似资料:
  • 问题内容: 有没有办法确定对象是否是泛型类型的实例? 这显然行不通。还有其他选择吗?就像我想使用Java反射来实例化一个类,然后检查以确保它是通用类型。 问题答案: 进行此检查的唯一方法是,是否具有表示类型的对象:

  • 问题内容: Java中的类,对象和实例是什么? 问题答案: Java(和任何其他编程语言)是根据类型和值建模的。从理论上讲,值是某种信息量的表示,类型是一组值。当我们说值X 是类型Y 的实例时,我们只是说X是类型Y的值集合的成员。 这就是“实例”一词的真正含义:它描述的是一种关系而不是事物。 Java编程语言的类型系统支持两种类型,原始类型和引用类型。引用类型进一步分为类和数组类型。Java 对象

  • Monoid函数的类型签名是:

  • 英文原文:http://emberjs.com/guides/object-model/classes-and-instances/ 定义一个新的Ember的类,只需要调用Ember.Object的extend()方法即可: 1 2 3 4 5 App.Person = Ember.Object.extend({ say: function(thing) { alert(thing)

  • 问题内容: 怎么有一个类的实例是,而该类不是的子类呢?这是一个例子: 问题答案: 在Python 2中, 类型 和 类 不是同一对象,特别是对于老式类, 它与对象是不同的。因此这是可能的,因为老式类的实例实际上是与其类不同的类型(): 这在新型类中得以解决: 旧样式类不是类型,新样式类是: 旧样式类被声明为已弃用。在Python 3中,只有新型类。等效于并且您的代码将在两次检查中产生。 看一下这个

  • 问题内容: 我需要保留Swift元类型的集合并编写一个函数,该函数将检查给定对象是否是其中之一的实例。我可以在Java中轻松做到这一点: 但是,我不知道如何在Swift中做到这一点: 这甚至可以在Swift中完成吗? 问题答案: 不幸的是,您目前只能对运算符使用命名类型,还不能对其使用任意的元类型值(尽管实际上 应该 可以使用IMO )。 假设您可以控制要与之进行比较的元类型的创建,则达到相同结果