1、面向对象和面向过程
面向过程: 以事物的流程为核心. 优点: 负责的事物流程化, 编写简单; 缺点: 可拓展性差.
面向对象: 一切以对象为核心. 对象里封装着一切. 优点: 可拓展性强; 缺点: 编写难度高.
2、类和对象
类是对事物的总结, 是属性和方法的结合体.
对象是类的实例化结果. 对象里面可封装各种属性(方法是放在类的内存地址里的, 对象里是没有方法的)
两者关系: 类是对事物的总结, 对象是类实例化的结果, 对象能执行那些方法, 都由类决定.
3、类的创建过程?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Info: 2 def __init__(self,name,passwd,gender,age): # self 是实例化对象时执行__init__()方法系统自己产生的一个对象,self和 3 self.name = name # Info()是同一个对象, 哪个对象在调用,self就是那个对象 4 self.passwd = passwd 5 self.gender = gender 6 self.age = age 7 8 def login(self,nm,pw): 9 if nm == self.name and pw == self.passwd: 10 print("您已登陆成功") 11 else: 12 print("用户名或密码不对") 13 14 cus = Info("达文西","dwx123","男","45") # 类的实例化结果. 类在实例化前要先执行__init__()方法,然后再有的结果.
4、类的三大特征
4.1、封装:
把很多数据(包括一些属性或方法等)封装在对象里, 然后通过这个对象来调用这些属性或方法(静态方法、类方法、静态字段除外).
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class ShangDan: 2 def __init__(self,name,attact,weapon,point): # 实例化对象时把实例化的参数(名字,攻击,武器,关键点)传进来,并封装 3 self.name = name # 在self这个对象中; 将do()这个方法也封装在的self中 4 self.attact = attact 5 self.weapon = weapon 6 self.point = point 7 8 def do(self): # 普通方法, 只能由对象调用, 不能用类名直接调用. 9 print("%s可以用%s上阵杀敌!" %(self.name,self.weapon)) 10 11 h = ShangDan("盖伦","物理攻击","大保剑","草丛蹲人") 12 h.do()
4.2、继承 -----> 单继承(继承一个父类); 多继承(继承多个父类)
子类继承父类, 则可以使用父类中非私有属性或方法外的内容.
什么情况下要继承类呢?
两个类有相同的功能或特征时 可以采用继承的方式. -----> 可以避免写重复代码或重复写方法.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class F_class1: 2 def func(self): 3 print("我是父类1的方法") 4 5 class F_class2: 6 def func(self): 7 print("我是父类2的方法") 8 9 class S_class(F_class2, F_class1): # 多继承, 查找顺序按照继承顺序先后, 先F_class1, 后F_class2. 10 def func(self): 11 print("我是子类的方法") 12 13 14 s = S_class() 15 s.func() # 子类在执行func()时自身优先,自身有func()执行完停止, 16 # 没有的话往上找, 找到F_class2, 有则执行完就停止, 没有的话再找F_class1,直到找到为止.
4.3、多态 ----> python自带多态
在python中, 声明一个变量时是不需要声明该变量的数据类型的.
python中, a = 25 , 也可以重新给a 赋一个"25"字符串, 是不会报错的.
其他语言中, int a = 25 , 声明a 是一个整形, 不允许给a 赋予除整形以外的其他值.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Animal: 2 def chi(self): 3 print("所有的动物都能自主吃食") 4 5 class Dog(Animal): 6 def chi(self): 7 print("狗会吃东西") 8 9 class Cat(Animal): 10 def chi(self): 11 print("猫会吃东西") 12 13 class Elephant(Animal): 14 def chi(self): 15 print("大象会吃东西") 16 17 class Worker(): 18 def act(self,ani): 19 ani.chi() # 只要包含了chi()这个功能的所有对象都可以执行. ----> 也叫作鸭子模型(只要有鸭子的特征都是鸭子) 20 # 并不是说Worker类只有Worker对象(w)才能调用. 21 22 d = Dog() 23 c = Cat() 24 e = Elephant() 25 w = Worker() 26 w.act(d) 27 w.act(c) 28 w.act(e)