Mer*_*ato 4 python types python-3.x
从我了解的Python 3,类型type是用来创建类对象的元级,所以type是object为“汽车”是“美洲虎”,通过调用它的工艺__call__方法,然后调用类的__new__和__init__方法,返回类本身的实例。
在正常情况下,类型和对象之间的关系是很合理的。一切都是对象(子类object),一切都有类型;对象的类型5为int,int类型为type。因此,isinstance(5, int)且isinstance(int, type)为真。但是,isinstance(5, type)这不是正确的,因为5它不是类对象,而是类的实例。
本文:http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html#object-type-example
因此,将一个对象定义为仅具有一种类型。但是,在非常原始的级别上,类type及其object自身之间的关系使我感到困惑。type从中object可以看出,是的子类__bases__,但object本身是的实例type。
如果描述5之类的东西可以分为“肉”和“骨头”,其中“肉”代表它在内存中的实际创建并为其赋值,而“骨头”则代表其在法律上的定义价值和行为的范围,这是否意味着从根本上讲,type它负责创建类对象的“肉”,并object负责定义“骨骼”?如果是这样,那么在这种情况下,如果“骨骼”是该类,那么创建类实例的“肉类”等效于int什么?
Python中的每个对象类都继承了object该类的行为。首先,这意味着
>>> isinstance(x, object)
True
Run Code Online (Sandbox Code Playgroud)
无论x碰巧绑定到什么,Python 3中都是如此。这也意味着object,除非被更具体的类覆盖,否则所有内容还将继承as 的方法。因此,x == y将诉诸object.__eq__如果既不的x或y压倒的__eq__方法。
type 在Python 3中也是对象-它继承自对象:
>>> isinstance(type, object)
True
Run Code Online (Sandbox Code Playgroud)
这意味着它type是一个对象,并且已从object类继承了行为。那就是使人们能够写类似的东西的原因
>>> type == type
True
>>> type.__eq__
<slot wrapper '__eq__' of 'object' objects>
Run Code Online (Sandbox Code Playgroud)
在type.__eq__从继承的object类。
但是object类本身也是一种类型:
>>> isinstance(object, type)
True
Run Code Online (Sandbox Code Playgroud)
这意味着object作为对象的类继承了type- 的行为,type是对象的元类。
当然type,的元类是类型:
>>> isinstance(type, type)
True
Run Code Online (Sandbox Code Playgroud)
而类object是object太:
>>> isinstance(object, object)
True
Run Code Online (Sandbox Code Playgroud)
当构造一个类的实例时,该类本身负责该类的肉和骨头,但是也许可以区分一下:骨头遵循普通的类继承,并且肉在类和元类之间分配血统; 元类也是类对象本身的骨骼。
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |