类、对象体系
一. Python面向对象特点
Python所谓的“一切皆对象”总结而言可以理解如下,
- Python语言中,基本类型也是对象。相比其他语言,Python不再区别对待基本类型和对象,所有基本类型内部均由对象实现。 一个整数是一个对象,一个字符串也是一个对象。
- 类型也是一种对象 ,称为类对象。 整数类型是一个对象,字符串类型是一个对象,程序中通过 class 关键字定义的类也是一个对象。
- 通过类型实例化得到的对象,称为实例对象。
Python面向对象最大的特点可以总结为,“ 类 ”和“ 对象 ”在 Python 内部都是通过对象实现的。
二. Python类、对象体系
2.1 实例对象、类型对象、type类型
2.1.1 内置类型
以int类为例,
变量a是个整数对象(实例对象),其所属类是整数类型(类型对象)
>>> a = 1
>>> type(a)
<class 'int'>
>>> isinstance(a, int)
True
>>> type(int)
<class 'type'>
整数类型的类型是“type”,即类型的类型。type类型比较特殊,它的实例对象还是type类对象。
2.1.2 自定义类型
自定义一个狗类型(Dog)及其子类—猎狗类型(Sleuth),
class Dog(object):
def yelp(self):
print('woof')
class Sleuth(Dog):
def hunt(self):
pass
测试代码如下,
>>> dog = Dog()
>>> dog.yelp()
woof
>>> type(dog)
<class '__main__.Dog'>
>>> type(Dog)
<class 'type'>
>>> sleuth = Sleuth()
>>> sleuth.hunt()
>>> type(sleuth)
<class '__main__.Sleuth'>
>>> type(Sleuth)
<class 'type'>
>>> issubclass(Sleuth, Dog)
True
2.2 object类型
Python中除object类自身外,其他类型均继承于object类,即object 是所有类型的基类。
>>> issubclass(int, object)
True
>>> issubclass(Dog, object)
True
>>> issubclass(Sleuth, object)
True
2.3 type和object类间的关系
- object 类是所有类型的基类,本质上是一种类型,因此其类型必然是type。
- type类是所有类型的类型,本质上也是一种类型,因此其类型必须是它自己。
- object是所有类型的基类,理论上object类也是type类的基类。
上述结论用代码表示如下,
>>> type(object)
<class 'type'>
>>> type(object) is type
True
>>> type(type)
<class 'type'>
>>> type(type) is type
True
>>> issubclass(type, object)
True
>>> type.__base__
<class 'object'>
2.4 类、对象关系图示
将2.1-2.3节的内容使用关系图表示,