【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态

机器学习初学者

共 4086字,需浏览 9分钟

 ·

2022-02-12 13:19

这一周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的两大核心概念是类和对象,三大特性是封装、集成和多态。

往期精彩回顾




浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报