#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: haozhengwei @file: jicheng.py @time: 2022/01/10 @desc: """ # 在python中展现面向对象的三大特征,封装、继承、多态 # 封装:指的是把内容存储在某个容器中,便于以后的调用。 # 他需要: # 把内容封装到某个地方,比如属性、方法的定义就是封装;在另外一个地方调用被封装的内容 # 对于封装来说其实就是使用初始化构造方法将内容封装到对象中,然后通过对象直接得获得被封装的内容,或者通过self简洁的获得被封装的内容 # 继承:子可以继承父的内容【属性和行为】类所有的,类-实例都有;相反,类-实例有的,类不一定有; # 所以,对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,而不必一一实现每个方法; # 这样可以提高代码编写效率,精简代码的层级结构;比较清晰便于扩展; # class 类名(父类名): # '''子类继承父类中公共的属性和方法''' # pass # 多继承 # 比如C可以继承A和B两个父类的属性和方法 # class A(object): # print('a') # pass # # class B(object): # print(B) # pass # # class C(A,B): # print('I am son of A and B') # pass class Shenxian: def fly(self): print('神仙都会飞') pass class Monkey: def chitao(self): print('猴子喜欢吃桃子') pass class Sunwukong(Shenxian, Monkey):#孙悟空既是神仙也是猴子 pass swk = Sunwukong() swk.fly() swk.chitao() # 问题:当多个父类当中存在相同方法的时候,应该去调用哪一个? # 直系优先,先就近级别搜索;没有则再上一级别;可以用__mro__方法查看,比如swk.__mro__ # 在类的传递过程中,我们把父类称为基类,子类称为派生类,父类的属性和方法可以一级一级的传递到子类; # 一般情况下在做类的设计的时候,一般不超过3级 # 重写父类中的方法:所谓重写,就是子类中,有一个和父类同名的方法,在子类中的方法会覆盖掉父类中的同名方法