python面向对象(封装,继承,多态)
学习完本篇,你将会深入掌握
- 如何封装一个优雅的借口
- python是如何实现继承
- python的多态
封装
- 含义:
1.把对象的属性和方法结合成一个独立的单位,并尽可能隐蔽对象的内部细节(尤其是私有数据)
2.目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而,使软件错误能够局部化,大大减少查错和排错的难度。
类的继承
- 体现
1.设置对象中的成员变量和方法的访问权限,使用
__member(方法也是这样定义),只能被类内部的方法访问,不被外部访问。
2.其它对象不能直接修改本对象所拥有的私有属性和私有方法。 - 含义:
1.子类自动地享用父类中拥有的属性和方法
示例
- 继承优点
*示例1
例子:请确认各类之间的关系
plane(飞机)
military plane(军事机)
passenger plane (客机)
cargo plane (货物机)
fighter plane (战斗机)
Airliner (民用机)
*示例2
class employee(object):
name = “”
sex = “”
age = 0
def say():
return “hello world”
class manage(object):
name = “”
sex = “”
age = 0
# 发放工资特 有属性
putMoney = 0
def say():
return “hello world”
- 示例3
class manage(employee):
#发放公司
putMoney = 0
#类中的方法
def say():
return “I am Manage”
继承的定义
- 子类的成员有一部分是子类自己声明定义的。
- 另一部分是从它的父类继承的。
- 子类继承父类的成员变量作为自己的一个成员变量。
- 继承父类的方法作为自己的方法。
继承的实现
class 类名( 父类):
成员变量赋值
成员方法声明
说明:
1、子类将自动继承父类中的公有成员
2、私有属性和方法不能被继承。
- 子类中新增加的属性和方法是对父类的扩展
- 子类中定义的与父类同名的属性是对父类属性的隐藏,同名的方法是对父类方法的覆盖
子类使用构造函数
- 构造方法不能支持多态,一个类中只有一个
- 如果子类没有构造方法,则它继承父类无参数的构造方法作为自己的构造方法
- 如果两者都没有构造方法,系统默认调用无方法的构造方法
- Super关键字可以调用父类的构造方法,但是必须使用在子类的构造方法中
成员变量的隐藏
- 当子类中定义的成员变量只要和父类中的成员变量同名时,子类就隐藏了继承的成员变量
方法重写
- 子类可以隐藏已继承的方法,子类通过方法重写来隐藏继承的方法
- 方法重写:定义一个方法,并且这个方法的名字、参数个数与从父类继承的方法完全相同
- 子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为
注意事项:方法覆盖注意事项:子类重写的父类方法的访问权限不能低于父类方法的访问权限。
- 子类继承父类的speak()方法和cry()方法,但子类通过重写speak()隐藏了继承的speak()方法
super关键字
- Python中既可以通过super来访问父类也可以通过父类类名来访问
- 访问父类方法或者重写方法,如:super( subclass,self). Method([paramlist])
- 访问父类属性,如:super( subclass,self). Attribute
- 访问父类构造函数,如:super( subclass,self). init([paramlist])
- 子类继承父类的speak()方法和cry()方法,在speak方法中使用super来访问父类cry、speak以及mVar属性
多态
- 多态:是指一个程序中存在着同名不同实现的方法
- 表现形式:
1.重载:python不支持
2.重写:子类中对父类方法进行重写(重新定义),但具体实现不一样
练习
- 1.编写一个Ball(球)父类,包含属性(大小,重量,颜色),包含两个构造方法,一个默认的,一个接收(大小,重量,颜色)三个参数的构造方法。
编写一个篮球子类,继承Ball(球),并打印出篮球的大小,重量和颜色。 - 2.编写一个雇员类(Employee)包含有姓名、性别、年龄等属性,编写一个经理类(Manager),经理类继承雇员类。编写一个测试类,实例化一个经理对象,并输出经理的姓名、性别和年龄。
- 3.有一个动物类(抽象类Animal),它有两个子类狗类(Dog)和猫类(Cat)实现抽象类Animal,在Animal类中有一个打招呼的方法say(),让它的两个子类重写父类打招呼的方法,实现各*
- 4.编写一个Studeng类,其中包括(姓名、学号、班级、性别、年龄、家庭住址)和取得这些属性的方法,再增加一个sayHello()方法,用于输出学生的详细信息。
1)创建Studeng类的对象,编写程序测试这些方法。
2)创建两个学生对象,并比较二者的年龄,输出年龄较大的学生信息。 - 5.编程实现商品以及图书,电器,电子产品(继承)
- 6.编程实现计算圆柱体体积,圆锥体体积的方法(继承)
1)计算圆柱体体积方法
2)计算圆锥体体积方法
测试