Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅。
与其他面向对象编程语言相比, Python 有自己独特的一面。 这让很多开发人员在学习 Python 时,多少有些无所适从。 那么,Python 对象模型都有哪些特色呢?
一切皆对象
首先,在 Python 世界, 基本类型也是对象 ,与通常意义的“对象”形成一个有机统一。 换句话讲, Python 不再区别对待基本类型和对象,所有基本类型内部均由对象实现。 一个整数是一个对象,一个字符串也是一个对象:
>>> a = 1
>>> b = 'abc'
其次, Python 中的 类型也是一种对象 ,称为 类型对象 。 整数类型是一个对象,字符串类型是一个对象,程序中通过 class 关键字定义的类也是一个对象。
举个例子,整数类型在 Python 内部是一个对象,称为 类型对象 :
>>> int
<class 'int'>
通过整数类型 实例化 可以得到一个整数对象,称为 实例对象 :
>>> int('1024')
1024
面向对象理论中的“ 类 ”和“ 对象 ”这两个基本概念,在 Python 内部都是通过对象实现的,这是 Python 最大的特点。
类型、对象体系
a 是一个整数对象( 实例对象 ),其类型是整数类型( 类型对象 ):
>>> a = 1
>>> type(a)
<class 'int'>
>>> isinstance(a, int)
True
那么整数类型的类型又是什么呢?
>>> type(int)
<class 'type'>
可以看到,整数类型的类型还是一种类型,即 类型的类型 。 只是这个类型比较特殊,它的实例对象还是类型对象。
Python 中还有一个特殊类型 object ,所有其他类型均继承于 object ,换句话讲 object 是所有类型的基类:
>>> issubclass(int, object)
True
综合以上关系,得到以下关系图:
内置类型已经搞清楚了,自定义类型及对象关系又如何呢?定义一个简单的类来实验:
class Dog(object):
def yelp(self):
print('woof')
创建一个 Dog 实例,毫无疑问,其类型是