面向对象编程:
1、类的特性:
把一定的数据和处理数据的方法封装在一起,成为一个整体,这个整体在计算机语言里称为对象,封装数据和方法的过程称为面向对象编程。
Python中,把有着相同属性和方法的对象集合称为类,而一个对象就是类的具体实例。
比如,猫都有颜色、四肢等属性,也有跑步、跳跃等功能(方法),因此猫就是一个类,而某只具体的猫,是猫类的具体实例。
再比如,整型是一个类,某个具体的数值,比如“5”,就是整型的具体实例。
用类type()可以查看一个对象是什么类型,例如:
>>> type(5)
<class 'int'>
>>> type(5.0)
<class 'float'>
>>> type('a')
<class 'str'>
>>> type(range(5))
<class 'range'>
>>>
上例可以看出,5是整型,5.0是浮点型,'a'是字符串,range(5)是range类型。
用函数isinstance(o, t)判断对象o是否是t类型或t的子类,例如:
>>> isinstance(5,int)
True
>>> isinstance(5,str)
False
>>> isinstance(5,object)
True
>>>
类有三个特性,封装、继承和多态:
- 封装:封装即是把数据和方法整合在一起,通过访问控制,可以隐藏内部数据,只允许外部对象访问自己的部分数据或方法。封装保证了对象的独立性,可以防止外部程序破坏对象的内部数据,同时便于程序的维护和修改。
- 继承:继承是面向对象的程序设计中代码重用的主要方法,继承允许使用现有类的功能,并在无需重新改写原来的类的情况下,对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。被继承的类称为基类、父类或超类,通过继承创建的新类称为子类或派生类。
- 多态:子类具有父类的所有非私有数据和方法,以及子类自己定义的所有其他数据或方法,即子类具有两个有效类型:子类的类型及其继承的基类的类型。对象可以表现多个类型的能力称为多态性。
例如,猫,可看成是大自然封装的一个对象,其颜色可以被看到(访问数据属性),猫也可以用来抓老鼠(访问其方法),但是猫体内的细胞无法被访问,DNA复制的过程无法被访问,这些无法被直接访问的称为对象的私有属性和私有方法。
所有的橘猫都是橘猫类,除了橘猫类,还有狸花猫类、波斯猫类等,这些猫类又组成了猫种,橘猫类具有自身的特征,比如毛是橘黄色的,橘猫类又有猫种的特征,比如可以撸,猫种又有猫科特征,比如有利爪,猫科又属于哺乳纲,等等。
在自然界,对物种的划分——种-属-科-目-纲-门-界——就是层层继承关系,类的继承也是如此,而且子类既具有自身特征,又继承了父类非私有特征,这便是类的多态性。
Python中的对象在调用时,不需要检查对象是什么类型的,只关注其有什么方法有什么属性,如果方法和属性可以被使用,则对象就可以被正常调用,这种特点又称为鸭子类型,鸭子类型的含义是“如果一个东西走起来像鸭子,叫起来也像鸭子,那它就是鸭子”,即不管这个东西的本来面目,只需要它表现出鸭子的特征就行,鸭子类型虽然给程序开发带来了便利,但也需要注意对象的内部逻辑,其原本的鸭子特征可能突然暴露出猪的面目而使程序崩溃。
2、类的定义:
函数是数据和流程控制语句的结合体,类可看成是数据、流程控制语句和函数的结合体。和函数一样,