1,面向对象的三大特性:继承,多太,封装
- 1.1>继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个个父类,父类又可成为基类或超类,新建的类称为子类或派生类.
class Animal: breath = "呼吸" def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = ageclass Cat(Animal): # 括号里边的叫父类,基类,超类,括号外面的是子类和派生类 def __init__(self): pass def jiao(self): print("喵喵叫")
2,初识继承:
2.1>子类以及子类实例化对象也可以访问父类的恩和方法或变量.
2.1.1子类实例化访问父类的方法:
结果如下:
- 访问父类中的变量 print(d.breath).............................................此时打印的结果是:呼吸
- 2.1.2>子类可以访问父类的所有内容
- print(Dog.breath).....................................此时打印的结果是:呼吸
- print(Dog.pao())........................................此时打印的结果是:都可以奔跑
- 2.1.2>子类可以访问父类的所有内容
3,查询顺序:
4,通过子类对象去只执行父类的方法:子类中不要定义与父类同名的方法
- 通过子类对象去只执行子类的方法:只需要在子类建立这个方法
- 既要执行子类的方法,又要执行父类的方法有以下2中方法:
class Animal: breath = "呼吸" def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = ageclass Cat(Animal): # 括号里边的叫父类,基类,超类,括号外面的是子类和派生类 def __init__(self, name, sex, age, paws): # 第一种方法引用父类类名去执行父类中的构方法 super().__init__(name, sex, age, ) # 第二种用super.()内置函数去执行父类中方法 self.paws = paws def jiao(self): print("喵喵叫")c = Cat("加菲猫","公",2,"梅花爪")print(c.__dict__) # 此时打印的结果是{"name":"加菲猫","sex":"公","age":2,"paws":"梅花爪"}
5,继承的进阶
- 5.1>继承的分类:单继承,多继承
- 单继承:一个父类对应一个子类
- 多继承:一个子类与多个父类想对应
- 5.2>类的分类:经典类,新式类
- 新式类:凡是继承object类都是新式类,在python3x中所有的类都是新式类,因为python3x中的类都默认继承object
- 经典类:不继承object类都是经典类,在python2x中(既有新式类,又有经典类)所有类默认都不继承object类,所有的类都是经典类,你可以让其继承object类,在类名后加一个(object)即可
- 新式类,经典类查询顺序一样
- 5.3>多继承:
- 新式类:遵循广度优先
- 经典类:遵循深度优先
- 多继承的新式类:广度优先,一条道走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路,如果不能,则走到终点.广度优先可以用类名.mro()去查询广度优先的路径print(F.mro())
多继承经典类 深度优先:一条路走到底
- 5.4>继承到的好处:
- 1>提高了代码的服用率
- 2>提高了代码的维护性
- 3>让类与类之间产生了关系,是多的态前提