我对Python 3中的object
和type
类有些困惑。也许有人可以消除我的困惑或提供一些其他信息。
我目前的理解是,每个类(除外object
)都从称为的基类继承object
。但是每个类(包括object
)也是该类的type
一个实例,它是自身的实例,object
并且也从继承object
。
我的问题是:
是否有一个原因/设计决策,为什么object
是的实例type
并type
从中继承object
?type
对象的/ class是否也可以是对象本身?
类(type
)如何成为其自身的实例?
哪一个是真正的基类object
或type
?
我一直认为object
这将是最“基础”的类,但它似乎是的实例type
,这是的实例object
,是的实例type
,…递归在哪里结束?
是否有可能说明object
和type
类之间的关系?
我尝试查找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 )。 假设您可以控制要与之进行比较的元类型的创建,则达到相同结果