Python面向对象编程(封装、继承、多态)
面向对象的三大特性:
- 封装:根据职责将属性和方法封装到一个抽象类中。
- 继承:实现代码的重用,相同的代码不需要重复的编写。
- 多态:不同的对象调用相同的方法,产生不同的执行结果。增加代码的灵活度。
面向对象编程的步骤
- 将属性和方法封装到一个抽象的类中。
- 外界使用类创建对象,然后对象调用方法。
- 对象方法的细节都被封装在类的内部。
一、封装
封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方法。
定义类:
① 与定义函数类似,第一个参数必须是self。
② 对象属性的封装应该封装在类的内部。
- 在类的外部给对象增加属性
Class Cat():
def eat(self):
print("%s 爱吃鱼" %self.name)
tom = Cat()
tom.name = "Tom"
tom.eat()
隐患:如果运行时没有找到属性,程序就会报错。
2. init 方法
初始化方法,专门用来定义一个类具有哪些属性的方法。
Class Cat():
def __init__(self, name):
self.name = name
def eat(self):
print("%s 爱吃鱼" %self.name)
tom = cat('Tom')
tom.eat()
3.__del方法
当一个对象被从内存中销毁之前,会自动调用__del__方法,一旦调用__del__方法,生命周期结束。
4.__str__方法
必须返回一个字符串,在print输出对象变量时,能够打印自定义内容。
二、继承
- 设计类的技巧
- 子类针对自己特有的需求,编写特定的代码
单继承
- 定义: 子类拥有父类的所有方法和属性。
Class 类名(父类名):
pass
- 继承的传递性:
C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有属性和方法。
-
方法的重写
当父类的方法实现不能满足子类需求时,可以对方法进行重写。①覆盖父类的方法 => 运行时只会调用子类中重写的方法,而不会调用父类封装的方法。
②对父类方法进行拓展 super(). + 父类方法super()
用来在重写父类方法时调用父类中封装的方法实现
2. 多继承
- 定义: 子类可以拥有多个父类,并且具有所有父类的属性和方法。
Class 子类名(父类1, 父类2……):
pass
- 如果父类之间存在同名的属性或方法,尽量避免使用多继承。
三、多态
多态:不同的子类对象的调用相同的父类方法,产生不同的执行结果。
- 多态可以增加代码的灵活度
- 以继承和重写父类方法为前提
- 是调用方法的技巧,不会影响到类的内部设计