一、面向对象与面向过程
面向对象与面向过程是两种不同的编程范式,编程范式指的是按照什么方式去编程,去实现一个功能。不同的编程范式本质上代表对各种类型的任务采取不同的解决问题的思路。
1、面向过程编程
角色是执行者。把一个项目(事情)按照一定的顺序,从头到尾一步步做下去。这种思想好理解,但只要前面有一个步骤变了,后面的就也要变,不易维护。
2、面向对象编程
角色是指挥者。把一个项目(事情)分成一个个小部分,每一个部分负责一方面功能,最后由这些部分组合而成为一个整体。类似一个机关,分为各个职能部门,只要符合一定前提就行了。面向对象的思想适合多人的分工合作。
面向对象是包含面向过程的思路的,比如定义类中的方法,每一个小方法小功能中还是面向过程的思想。
函数编程与OOP的主要区别就是OOP可以使程序更加容易扩展和易更改。
二、面向对象中的小概念
1、类
Class,相当于一个种类,一个模型。一个类就是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象都具备的属性、共同的方法。
2、对象(实例)
Object,模型造出来的具体东西。一个对象就是一个类实例化后的实例。一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象,每个对象也可以有不同的属性。
4、实例化
初始化一个类,造一个对象。把一个类变成一个具体的对象的过程,叫实例化。
5、属性
属性就是类里面的一个变量。有类变量和实例变量,类变量是类在定义的时候就有的,实例变量是在实例化的时候才产生的变量。
6、方法
方法就是类的功能,也就是定义在类里面的函数。
简单定义一个类来说明以上概念,类定义使用class关键字,类名首字母大写。
class Baby:#经典类 nationnality = 'China'#类属性 def __init__(self,name):#构造函数,非必须 self.name = name,#实例属性 self.face = 1, print('实例创建时执行') def __del__(self):#析构函数,非必须 print('实例销毁前执行') def eat(self):#方法 print('want milk') class car(object):#新式类 def drive(self): pass #在python3里经典类和新式类没有任何区别,均是广度优先 #python2中经典类在多继承的时候是深度优先,新式类是广度优先 Amy = Baby('A') #实例化,Amy就是Baby这个类的实例 #构造函数里面制定了必须传name,在实例化的时候就要把name传进去 #实例化需要变量接收,不然实例化结束,实例销毁 print(Amy.face)#调用实例属性 Amy.eat()#调用实例方法
7、继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。子类可以重写父类方法。继承是为了代码重用。
python3中多继承都是广度优先,python2中经典类的多继承是深度优先,新式类的多继承是按照广度优先的。
8、封装
把一些功能的实现细节不对外暴露,类中对数据的赋值、内部调用对外部用户是透明的,使类变成一个胶囊或容器。里面包含着类的数据和方法。
比如说造的一个人,你把他身体内部的什么心肝脾肺肾都封装起来了,其他人都看不到,你直接找这个人。
9、多态
对不同类的对象发出相同的消息将会有不同的行为。例如,组长说大家喝点东西吧,小A喝茶,小B喝果汁,小C喝水。
多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。一种接口,多种实现。
三、本类对象
四、构造函数与析构函数
五、
if __name__ == '__main__'