【python学习】面向对象编程以及面向对象编程的核心概念和使用方法

引言

Python语言设计之初,就是为了面向对象,所以Python的面向对象更加易于理解。
面向对象编程中,我们将现实世界的实体视为对象,每个对象都有属性(数据)和行为(方法)

一、面向对象编程是什么

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和与数据相关的操作封装在一起,形成一个独立的实体,这个实体称为对象。
OOP的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)

二、面向过程编程和面向对象编程的区别

2.1 面对过程编程

面向过程编程是一种以过程为中心的编程范式
在这种范式中,程序被分解成一系列步骤或过程,这些步骤或过程按顺序执行,以完成特定的任务
面向过程编程通常使用函数和结构来组织代码,它强调的是解决问题的步骤和顺序

2.2 面向对象编程

面向对象编程是一种以对象为中心的编程范式
在这种范式中,程序被分解成一系列相互交互的对象,每个对象都有自己的数据(属性)和行为(方法)
面向对象编程强调的是将数据和操作数据的方法封装在一起,形成独立的实体,这些实体可以相互通信和协作

2.3 区别

2.3.1 设计思路:

面向过程编程:从步骤或过程出发,将问题分解为一系列的函数调用。
面向对象编程:从对象和类出发,将问题分解为一系列相互交互的对象和类。

2.3.2 数据与操作:

面向过程编程:数据和操作通常是分离的,操作(函数)作用于数据。
面向对象编程:数据(属性)和操作(方法)被封装在一起,形成独立的对象。

2.3.3 代码结构:

面向过程编程:代码结构通常是线性或树状的,函数调用和流程控制是主要手段。
面向对象编程:代码结构通常是网状的,对象之间的通信和协作是主要手段。

2.3.4 代码复用:

面向过程编程:代码复用主要通过函数的参数传递和返回值来实现。
面向对象编程:代码复用主要通过继承和多态来实现,对象可以继承其他对象的属性和方法,并且可以重写或扩展这些属性和方法。

2.3.5 灵活性和扩展性:

面向过程编程:当需求变化时,可能需要修改和重写大量的函数代码。
面向对象编程:通过增加新的类和对象,可以更容易地扩展和修改程序,实现代码的灵活性和可维护性。

总而言之,面向对象编程通常比面向过程编程更适用于复杂和大型项目,因为它提供了更好的代码组织、复用和维护能力

三、面向对象编程的核心概念

3.1 类(Class)

类是创建对象的蓝图,它定义了一组属性和一组方法。属性是对象的静态特征,而方法是对象可以执行的操作

3.2 对象(Object)

对象是类的实例,它具有类的属性和方法。每个对象都有自己独立的属性和状态

3.3 封装(Encapsulation)

封装是指将对象的实现细节隐藏起来,只暴露出公共接口。这样可以提高代码的安全性和可维护性

3.4 继承(Inheritance)

继承允许我们创建一个新的类(子类),这个类可以继承另一个类(父类)的属性和方法。子类可以扩展或修改父类的行为

3.5 多态(Polymorphism)

多态允许我们使用一个接口来表示不同的数据类型。这意味着不同的类可以有相同的方法名,但实现方式不同

3.6 类和对象的关系逻辑图

在这里插入图片描述

3.7 继承的逻辑图

在这里插入图片描述

四、面向对象编程的示例

使用Python来创建一个简单的计算器类,并创建一个子类来扩展计算器的功能

# 定义一个父类
class Calculator:
    def add(self, a, b):
        return a + b
    def subtract(self, a, b):
        return a - b
    def multiply(self, a, b):
        return a * b
    def divide(self, a, b):
        if b == 0:
            raise ValueError("Division by zero is not allowed.")
        return a / b
# 定义一个子类,继承自 Calculator 类
class ScientificCalculator(Calculator):
    def square(self, a):
        return a ** 2
    def cube(self, a):
        return a ** 3
    def factorial(self, n):
        if n == 0:
            return 1
        return n * self.factorial(n - 1)
# 创建 Calculator 类的实例
calculator = Calculator()
# 创建 ScientificCalculator 类的实例
scientific_calculator = ScientificCalculator()
# 使用父类和子类的方法进行计算
print(calculator.add(5, 3))  # 输出: 8
print(calculator.subtract(5, 3))  # 输出: 2
print(calculator.multiply(5, 3))  # 输出: 15
print(calculator.divide(5, 3))  # 输出: 1.6666666666666667
print(scientific_calculator.square(5))  # 输出: 25
print(scientific_calculator.cube(5))  # 输出: 125
print(scientific_calculator.factorial(5))  # 输出: 120

解释一下代码:

  • Calculator 是一个父类,它定义了四个基本算术运算的方法
  • ScientificCalculator 是从 Calculator 继承的子类,它添加了三个科学计算的方法:squarecubefactorial
  • 我们创建了 Calculator 类的实例,并创建了 ScientificCalculator 类的实例
  • 我们通过 calculator 对象调用了它的方法来执行基本算术运算,通过 scientific_calculator 对象调用了它的方法来执行科学计算

五、总结(思维导图)

在这里插入图片描述

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值