美文网首页
大师兄的Python源码学习笔记(二十二): 虚拟机中的类机制(

大师兄的Python源码学习笔记(二十二): 虚拟机中的类机制(

作者: superkmi | 来源:发表于2021-07-02 22:30 被阅读0次

大师兄的Python源码学习笔记(二十一): 虚拟机中的函数机制(三)
大师兄的Python源码学习笔记(二十三): 虚拟机中的类机制(二)

一、Python中的对象模型

  • 在面向对象理论中,有两个核心概念:对象,Python中也实现了这两个概念。
  • 在Python中,所有东西都是对象也是一种对象
  • 在Python2.2之前,实际存在三类对象:
类型 说明
type对象 表示Python内置的类型
class对象 表示Python程序员定义的类型
instance对象 表示由class对象创建的实例
  • 在Python2.2之后,type对象class对象统一由class对象表示。
1. 对象间的关系
class A(object):
        ...
a = A()
  • Python的三种对象之间,存在着两种关系:

is-kind-of关系: 对应于基类子类之间的关系(object与A)。
is-instance-of关系: 对应于实例之间的关系(A与a)。

  • 可以通过__bases__属性探测一个对象和哪个对象存在is-kind-of关系。
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(A.__bases__)
(<class 'object'>,)
  • 可以通过__class__属性或type方法探测一个对象和哪个对象存在is-instance-of关系。
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(A.__class__)
>>>    print(a.__class__)
<class 'type'>
<class '__main__.A'>
  • 可以通过issubclassisinstanceof判断对象间是否存在is-kind-ofis-instance-of关系。
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(isinstance(a,A))
>>>    print(issubclass(A,object))
True
True
  • 对象之间的关系图如下:


2. <class 'type'>和<class 'object'>
  • <class 'type'>是Python中的一种特殊class对象,它可以成为其它class的type,这种class对象被称为metaclass对象。
  • <class 'object'>也是一种特殊class对象,Python中的任何class都必须直接或间接继承自<class 'object'>
  • 在Python中,任何一个对象都有一个type,可以通过__class__获得:
  • 任何一个instance对象type都是一个class对象
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(a.__class__)
<class '__main__.A'>
  • 任何一个class对象type都是metaclass对象,在大多数情况下metaclass都是<class 'type'>,对应PyType_Type
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(A.__class__)
<class 'type'>
  • 在Python中,任何一个class对象都直接或间接与<class 'object'>对象之间存在is-kind-of关系,包括<class 'type'>
>>>class A(object):
>>>    ...
>>>a = A()
>>>
>>>if __name__ == '__main__':
>>>    print(A.__class__.__bases__)
(<class 'object'>,)
  • <class 'object'>对应PyBaseObject_Type

相关文章

网友评论

      本文标题:大师兄的Python源码学习笔记(二十二): 虚拟机中的类机制(

      本文链接:https://www.haomeiwen.com/subject/uotkultx.html