继承就是让类与类之间产生关系,提高了代码的复用性 通过继承我们可以使一个类获取到其他类中的属性和方法 在定义类的时候,可以在类名后的括号里面指定当前类的父类(超类/基类) 继承是可以传递的,即由一个子类传递到子类的子类 继承是面向对象的三大特征之一(封装、继承、多态) 如上图:所有类的父类都是object
如果在子类中有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们称之为方法的重写(覆盖) 当我们调用一个对象的方法时: • 会优先去当前对象中寻找是否具有该方法,如果有则直接调用 • 如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法 • 如果没有,则去父类中的父类寻找,以此类推,直到找到object,如果依然没有找到就报错 如上图,属性全部被重写
•super()可以获取当前类的父类 •并且通过super()返回对象调用父类方法时,不需要传递self (1)用父类名进行继承 (2)用super()方法进行继承 子类可全部继承父类的属性和方法,又可全部重写
super()可以用来获取当前类的父类,但定义子类的括号中不能用此方法 如上图:当前状态下还未知子类的父类是谁
在开发中,父类.方法和super().方法不能混用,否则会形成死循环
(1)继承的传递 如上图,通过xx.__bases__方法可以获取其父类
(2)多重继承 如上图: 多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法 在开发中没有特殊情况,应该尽量避免使用多重继承。因为多重继承会让我们的代码更加复杂 多个父类出现了同名的方法,依照书写顺序,会先找第一个父类,如果没有则去第二个父类中找…
(3) 解耦合: 我们不希望不同部分的代码产生太多的牵连(一部分代码出现问题不至于全局出现瘫痪) 解耦合作用: 1.提高问题的解决效率 2.提高问题的解决概率 3.提供问题的解决速度 4.降低将来爆发隐患的可能性
多态是面向对象的三大特性之一 一个对象有多重表现形式去呈现它 多态的作用:python的多态是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数
Python中多态的特点 (1)只关心对象的实例方法是否同名,不关心对象所属的类型; (2)对象所属的类之间,继承关系可有可无; (3)多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强; (4)多态是调用方法的技巧,不会影响到类的内部设计。
类属性 :直接定义在类中的属性。类属性可以通过类和该类的实例来访问, 不能通过实例对象来修改(实例对属性赋值相当于新添加了一个实例属性),只能通过类对象来修改
#实例属性:通过实例对象来添加的属性;实例属性只能通过实例对象来访问,不能通过类对象来访问
以self为第一个参数的方法都是实例方法 通过实例对象调用时,会自动传递当前对象作为self传入 通过类对象调用时,不会自动传递self,需传递实例对象进入才可以(可通过类对象访问,但要传参)
在类内部通过@classmethod来修饰的方法属于类方法 类方法可以通过类对象调用,也可以通过实例对象调用 类方法第一个参数默认是cls,cls就相当于是当前的类对象 注意:修饰器@classmethod只对它下面的第一个类方法起作用,如果定义多个类方法需要添加多个修饰器
用@staticmenthod来修饰的方法就是静态方法 不需要指定任何的默认参数,静态方法可以被类对象和实例对象调用 静态方法和类本身无关,就是一个功能函数