【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态
这一周Python语言学习,记录如下。
01
面向对象编OOP
1.1 为什么学习和应用OOP?
1 OOP适合更加复杂的需求分析和项目开发。
2 OOP具有更强大的封装能力。
3 OOP相比于面向过程编程(OPP),是另一种编程思维,从
谁来做
思考需求分析和代码设计与开发。4 OOP可以提升我数据科学工作的效率。
1.2 什么是OOP?
OOP全称是(Object Oriented Programming),面向对象编程,一种编程思维和方式。
面对需求分析时,OPP会思考怎么做这个需求,而OOP会思考谁来做这个需求,并且进一步思考这个谁需要具备什么特征和行为,即这个谁的属性和方法。通过OOP,可以把这个谁的属性和方法封装在一起,做成一个类。类是一种抽象,类似建房子的图纸;对象是类的具体化或者实例化,类似按着图纸建成一栋栋房子。这个房子有什么特征和能够做什么,就取决于房子的图纸(类)的先前的设计。你会发现,面向对象编程,更接近我们的生活,更能够灵活性地表达我们的生活。
1.3 怎么学习OOP?
通过OOP的概念,我们发现,学习OOP时,我们需要学习这些内容:
1 OOP是一种编程思维和方式。
2 OOP的需求分析是从
谁来做
开始的,并且要想清楚这个谁要有什么职能。3 OOP的两个核心概念:类和对象。
4 OOP的三个重要特性:封装、继承和多态。
5 OOP的属性和方法的类型,例如实例属性和方法、类属性和方法、静态方法。
6 学习和使用OOP来设计和实现负责的项目和系统。
02
类和对象
2.1 概念描述
类和对象是OOP的两个核心概念。
类是抽象,不能直接使用,它是对一群具有相同特征或者行为的事物的一个统称。
1 特征称为属性
2 行为称为方法
对象是具体的,可以直接使用,它是类的具体存在,具有类所设计的属性和方法。
举例说明:
类相当于建房图纸,对象相当于按着建房图纸建造的一栋栋楼房。
在程序开发中,应该先有类,再有对象;应该先设计要使用的类,再设计其它类;设计类的时候遵循奥卡姆剃刀原则,即类设计的时候,不要增加没有的或者不必要的属性和方法。
2.2 类设计和生成
使用关键词class
来设计类。
简单示例。
需求分析,需求如下
18岁的小明喜欢跑步和读书。
20岁的小红也喜欢跑步和读书。
根据需求,我们创建一个Person类,具有姓名和年龄属性,跑步和读书方法。
参考代码如下:
# 设计Person类
class Person:
# 创建实例属性
def __init__(self, name, age):
self.name = name
self.age = age
# 创建实例方法
def run(self):
print("%d岁的%s喜欢跑步" % (self.age, self.name))
def read(self):
print("%d岁的%s喜欢跑步" % (self.age, self.name))
# 生成小明对象
xiao_ming = Person("小明", 18)
xiao_ming.run()
xiao_ming.read()
# 生成小红对象
xiao_hong = Person("小红", 20)
xiao_hong.run()
xiao_hong.read()
结果如下。
03
封装
封装是面向对象编程的一大特性。
OOP的第一步,把属性和方法封装到一个抽象类中。
外界使用类创建对象,然后用对象调用方法。
对象方法的细节被封装在类的内部。
前面的Person类就采用了封装技术。
04
继承
OOP有三大特性,分别是封装、继承和多态。
1 封装,根据这个谁的职能将属性和方法封装到一个抽象的类中
2 继承,实现代码重用,相同的代码不需要重复编写。编写程序时,请遵循不写重复代码块的原则。
3 多态,不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度,让代码可做更丰富的功能。
继承的知识点,罗列如下:
子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发。
子类根据自己职能,封装子类特有的属性和方法。
继承具有传递性。
当父类的方法实现不能满足子类需求时,可以对父类方法进行重写(一种是覆盖父类的方法,另一种是对父类方法功能进行扩展,需要的位置使用
super().父类方法
)子类对象不能直接访问父类的私有属性和方法(一种隐私保护技术),可以通过父类的公有方法间接访问。
子类可以多个继承类,比方说,孩子类继承父亲和母亲类的特性和方法。多重继承的时候,避免各个类里面具有相同的方法。
如果没有父类,建议统一继承自
object
。
05
多态
多态是指不同的子类对象调用相同的父类方法,会产生不同的执行结果。
多态的知识点:
1 多态的好处,增加代码的灵活度
2 多态的构建,以继承和重写父类方法为前提。
继承和多态的一个简单实例。
需求分析:
HR需要招聘程序员和设计师,基于OOP采用继承和多态编写代码。
参考代码:
class Person(object):
def __init__(self, name):
self.name = name
def work(self):
print("%s喜欢工作" % self.name)
class Programmer(Person):
def work(self):
print("%s编写代码" % self.name)
class Designer(Person):
def work(self):
print("%s设计UI" % self.name)
class HumanResources(object):
def __init__(self, name):
self.name = name
def hr_with_person(self, person):
print("%s招聘%s" % (self.name, person.name))
# 人才的工作职责
person.work()
# 创建一个程序员对象
xiao_ming = Programmer("小明")
# 创建一个设计是对象
xiao_hong = Designer("小红")
# 创建一个HR对象
xiao_fang = HumanResources("小芳")
# 招聘程序员
xiao_fang.hr_with_person(xiao_ming)
# 招聘设计师
xiao_fang.hr_with_person(xiao_hong)
结果如下:
06
总结
OOP是一种编程方式和思维框架,掌握和熟悉OOP,可以响应更加复杂的需求和开发更加复杂的系统。
OOP的两大核心概念是类和对象,三大特性是封装、集成和多态。
往期精彩回顾
适合初学者入门人工智能的路线及资料下载 (图文+视频)机器学习入门系列下载 中国大学慕课《机器学习》(黄海广主讲) 机器学习及深度学习笔记等资料打印 《统计学习方法》的代码复现专辑 AI基础下载 机器学习交流qq群955171419,加入微信群请扫码: