面向对象的三大特性
一、封装
把数据、值、变量放入到对象中
构造方法 _init_方法
特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤:
1、创建对象
2、通过对象执行类中的一个特殊方法(_init_方法)
class info: def __init__(self,name,age): self.name = name self.age = age self.gender = '男' def show(self): print(self.name,self.age,self.gender) alex = info('alex',20) alex.show() mike = info('mike',23) mike.show() ===>alex 20 男 ===>mike 23 男
二、继承
1、继承
-- 子类继承父类,或称派生类继承基类
class GrandFather: def plus(self): print("添加") class Father(GrandFather): # 父类(基类) def add(self): print("增加") def delete(self): print("删除") class Son(Father): # 子类(派生类) def get(self): pass s = Son() s.add() s.plus() ===>增加 ===>添加
2、重写
-- 防止执行父类中的某些方法
class Father: # 父类(基类) def add(self): print("父类中的增加") def delete(self): print("父类中的删除") class Son(Father): # 子类(派生类) def delete(self): print("子类中的删除") # 默认不再执行父类中的方法 s = Son() s.add() s.delete() # 此时子类不再继承父类中的delete方法,而是调用子类自己的方法 ===>父类中的增加 ===>子类中的删除
3、扩展
-- 即执行父类中的方法,也执行子类自己的方法
class RequestHandler: def get(self): print("父类中的获取") class BaseRequest(RequestHandler): def get(self): super(BaseRequest, self).get() # 执行父类中的方法 #RequestHandler.get(self) 与super方法效果一样,但更推荐使用euper方法 print("子类中的获取") obj = BaseRequest() obj.get() # 此时方法会执行父类中的方法,再执行子类的方法 ===>父类中的获取 ===>子类中的获取
4、多继承
-- 子类会根据左侧优先原则,在第一个父类中寻找方法,在找不到的情况下在去父类的父类中寻找
-- 当父类有同一个根时,根会在最后才执行
class Base: def a(self): print('Base') class F0(Base): def a1(self): print('F0') class F1(F0): def a1(self): print('F1') class F2(Base): def a(self): print('F2') class S(F1,F2): pass obj = S() obj.a() ===> F2
三、多态
python 原生即为多态,不需要过多进行处理