【Python】面向对象

news2024/11/26 19:23:46

一、初识对象
二、成员方法
三、类和对象
四、构造方法
五、其它内置方法
六、封装
七、继承
八、类型注解
九、多态

面向对象概念

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法组织成对象。对象是具有特定属性和行为的实体,而类是对象的模板,用于定义对象的属性和行为。

以下是面向对象编程的一些关键概念:

  1. 类(Class):
    • 类是一种用户定义的数据类型,它定义了对象的属性和方法。类是对象的蓝图或模板。例如,可以有一个 Person 类,用于表示人的属性和行为。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")
  1. 对象(Object):
    • 对象是类的实例,是具体存在的数据实体。在上面的例子中,可以创建 Person 类的对象,如 person1person2
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
  1. 封装(Encapsulation):
    • 封装是将数据和操作数据的方法捆绑在一起的概念。在类中,封装允许将属性和方法封装在类的内部,外部只能通过类的接口来访问。
# 使用对象的方法
person1.greet()
  1. 继承(Inheritance):
    • 继承是一种创建新类的机制,新类可以继承现有类的属性和方法。继承允许代码重用,并支持创建层次结构。
class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

    def study(self):
        print(f"{self.name} is studying.")
  1. 多态(Polymorphism):
    • 多态允许使用相同的接口处理不同类型的对象。在面向对象编程中,多态性使得可以使用基类的接口来处理派生类的对象。
def introduce(person):
    person.greet()

introduce(person1)
introduce(Student("Charlie", 22, "12345"))

这些概念共同构成了面向对象编程的基础。通过面向对象编程,可以更清晰地组织和设计代码,提高代码的可维护性和可复用性。

一、初识对象

使用对象完成数据组织的思路

  1. 生活中或是程序中,我们都可以使用设计表格、生产表格、填写表格的形式组织数据

  2. 进行对比,在程序中:

    • 设计表格,称之为:设计类(class)
    • 打印表格,称之为:创建对象
    • 填写表格,称之为:对象属性赋值
      在这里插入图片描述
      让我们更详细地解释一下这个比喻:
  3. 设计表格(设计类):

    • 在生活中,设计表格就是规划你的数据表的结构,定义了表格中每一列的名称和数据类型。在程序中,这对应于设计类。类是一种数据结构,它定义了一组属性(数据成员)和方法(函数成员),描述了对象的特征和行为。
  4. 打印表格(创建对象):

    • 打印表格是指在表格的基础上创建一份具体的记录。在程序中,这对应于创建对象。对象是类的实例,具体化了类的结构,拥有类定义的属性和方法。创建对象的过程称为实例化,通过这个过程,我们可以在程序中使用类定义的功能。
  5. 填写表格(对象属性赋值):

    • 填写表格是指向表格的每一列添加具体的数据。在程序中,这对应于为对象的属性赋值。对象的属性是类定义的变量,它们存储对象的状态信息。通过为对象属性赋值,我们将具体的数据存储到对象中。

举个简单的例子,比如有一个类定义:

class Student:
    def __init__(self, name, age, grade):
        self.name = name
        self.age = age
        self.grade = grade

    def display_info(self):
        print(f"Name: {self.name}, Age: {self.age}, Grade: {self.grade}")

这个类描述了学生的特征(姓名、年龄、成绩)和一个方法用于显示学生信息。现在,我们可以创建该类的对象并为对象的属性赋值:

# 创建学生对象
student1 = Student("Alice", 20, "A")

# 打印学生信息
student1.display_info()

在这个例子中,Student 就好比设计表格student1 对象就相当于打印表格,而为 student1 对象的属性赋值(例如,nameagegrade)就是填写表格

这种比喻使得面向对象编程的概念更加直观,帮助初学者更容易理解类、对象和属性的概念。

二、成员方法

  1. 类的定义和使用语法
  2. 成员变量和成员方法
  3. self关键字的作用

1、类的定义和使用语法

类的定义和使用

在这里插入图片描述

2、成员变量和成员方法

  • 类中定义的属性(变量),我们称之为:成员变量
  • 类中定义的行为(函数),我们称之为:成员方法

成员方法的定义语法在这里插入图片描述

3、self关键字的作用

  • 表示类对象本身的意思
  • 只有通过self,成员方法才能访问类的成员变量
  • self出现在形参列表中,但是不占用参数位置,无需理会

注意事项

在这里插入图片描述

三、类和对象

  1. 使用类描述现实世界事物的思想
  2. 类和对象的关系
  3. 什么是面向对象

1、使用类描述现实世界事物的思想

现实世界的事物和类

在这里插入图片描述

2、类和对象的关系

类和对象之间的关系是面向对象编程中的核心概念。让我们更详细地解释一下:

  1. 类(Class):

    • 类是一种抽象的数据类型,它定义了一组属性和方法。这些属性描述了类的状态,而方法描述了类的行为。类是一个模板或蓝图,它定义了如何创建对象。在编程中,类通常包括构造函数(用于创建对象)、属性(数据成员)和方法(函数成员)等。
  2. 对象(Object):

    • 对象是类的实例,它是根据类定义创建的具体实体。对象具有类定义的属性和方法,并可以进行特定的操作。对象是类的具体化,它占用内存并存在于计算机的运行时环境中。通过创建对象,我们可以在程序中使用类的功能。
  3. 关系:

    • 类是对象的模板,而对象是类的实例。一个类可以有多个对象,每个对象都有相同的属性和方法,但它们的具体值可以不同。类定义了对象的共同特征,而对象则是类的具体实现。
  4. 示例:

    • 假设有一个类 Car,该类具有属性(例如,颜色、型号)和方法(例如,启动、加速)。通过这个类,我们可以创建多个具体的汽车对象,每辆汽车都有自己的颜色和型号,并可以执行启动和加速等操作。
class Car:
    def __init__(self, color, model):
        self.color = color
        self.model = model

    def start(self):
        print(f"The {self.color} {self.model} is starting.")

    def accelerate(self):
        print(f"The {self.color} {self.model} is accelerating.")
# 创建两个Car对象
car1 = Car("Red", "Sedan")
car2 = Car("Blue", "SUV")

# 调用对象的方法
car1.start()
car2.accelerate()

在这个例子中,Car 类是一个模板,car1car2 是这个类的两个不同的对象。每个对象都有自己的颜色和型号,并可以执行类定义的方法。

总的来说,类是对对象的抽象,而对象是类的实例。通过类,我们可以定义一种数据类型,然后通过创建对象,我们可以在程序中使用这个数据类型的具体实例。
在这里插入图片描述

3、什么是面向对象

在程序中通过类来描述

在这里插入图片描述

基于类创建对象

在这里插入图片描述
在这里插入图片描述

总结

  1. 现实世界的事物由什么组成?

    • 属性
    • 行为
      类也可以包含属性和行为,所以使用类描述现实世界事物是非常合适的
  2. 类和对象的关系是什么?
    类是程序中的“设计图纸”
    对象是基于图纸生产的具体实体

  3. 什么是面向对象编程?
    面向对象编程就是,使用对象进行编程。
    即,设计类,基于类创建对象,并使用对象来完成具体的工作

四、构造方法

使用构造方法向成员变量赋值

属性(成员变量)的赋值

在这里插入图片描述

构造方法

在这里插入图片描述

构造方法注意事项

在这里插入图片描述

总结

  1. 构造方法的名称是:
    init,注意init前后的2个下划线符号
  2. 构造方法的作用:
    • 构建类对象的时候会自动运行
    • 构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值
  3. 注意事项:
    • 构造方法不要忘记self关键字
    • 在方法内使用成员变量需要使用self

五、其它内置方法

几种常用的类内置方法

魔术方法

在这里插入图片描述

str 字符串方法

在这里插入图片描述

lt 小于符号比较方法

在这里插入图片描述
直接对2个对象进行比较是不可以的,但是在类中实现__lt__方法,即可同时完成:小于符号 和 大于符号 2种比较
在这里插入图片描述

le 小于等于比较符号方法

在这里插入图片描述

eq 比较运算符实现方法

在这里插入图片描述

总结

在这里插入图片描述

六、封装

1、封装的概念

面向对象的三大特性

面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。

面向对象包含3大主要特性:

  • 封装
  • 继承
  • 多态

封装

在这里插入图片描述

对用户隐藏的属性和行为

在这里插入图片描述

2、私有成员的使用

私有成员

在这里插入图片描述

使用私有成员

在这里插入图片描述
在这里插入图片描述

总结

  1. 封装的概念是指?
    将现实世界事物在类中描述为属性和方法,即为封装。
  2. 什么是私有成员?为什么需要私有成员?
    现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了
  3. 如何定义私有成员?
    成员变量和成员方法的命名均以__作为开头即可
  4. 私有成员的访问限制?
    • 类对象无法访问私有成员
    • 类中的其它成员可以访问私有成员

七、继承

  1. 继承的基础语法
    • 继承的概念
    • 继承的使用方式
    • pass关键字的作用
  2. 复写和使用父类成员
    • 复写父类成员的语法
    • 如何在子类中调用父类成员

1、继承的基础语法

继承的引出

在这里插入图片描述

单继承

在这里插入图片描述

多继承

在这里插入图片描述

多继承注意事项

在这里插入图片描述

总结

  1. 什么是继承?
    继承就是一个类,继承另外一个类的成员变量和成员方法
    语法:
    在这里插入图片描述
    子类构建的类对象,可以
    • 有自己的成员变量和成员方法
    • 使用父类的成员变量和成员方法
  2. 单继承和多继承
    单继承:一个类继承另一个类
    多继承:一个类继承多个类,按照顺序从左向右依次继承
    多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
  3. pass关键字的作用是什么
    pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思

2、复写和使用父类成员

复写

在这里插入图片描述

调用父类同名成员

在这里插入图片描述

总结

  1. 复写表示:
    对父类的成员属性或成员方法进行重新定义
  2. 复写的语法:
    在子类中重新实现同名成员方法或成员属性即可
  3. 在子类中,如何调用父类成员
    在这里插入图片描述
    注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的

八、类型注解

1、变量的类型注解

为什么需要类型注解

当我们调用方法,进行传参的时候(快捷键ctrl + p弹出提示):
在这里插入图片描述
为什么内置模块random的方法可以提示类型
自己定义的就不可以?

因为PyCharm无法通过代码
确定应传入什么类型
我们需要使用类型注解

类型注解

Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。
类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。
主要功能:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
  • 帮助开发者自身对变量进行类型注释

支持:

  • 变量的类型注解
  • 函数(方法)形参列表和返回值的类型注解

变量的类型注解语法

类型注解的语法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型注解的限制

在这里插入图片描述

总结

  1. 什么是类型注解,有什么作用?
    在代码中涉及数据交互之时,对数据类型进行显式的说明,可以帮助:
    • PyCharm等开发工具对代码做类型推断协助做代码提示
    • 开发者自身做类型的备注
  2. 类型注解支持:
    • 变量的类型注解
    • 函数(方法)的形参和返回值的类型注解
  3. 变量的类型注解语法
    • 语法1: 变量: 类型
    • 语法2: 在注释中,# type: 类型
  4. 注意事项
    类型注解只是提示性的,并非决定性的。数据类型和注解类型无法对应也不会导致错误

2、函数(方法)的类型注解

为函数(方法)形参进行类型注解

在这里插入图片描述

为函数(方法)返回值进行类型注解

在这里插入图片描述

总结

  1. 函数(方法)可以为哪里添加注解?
    • 形参的类型注解
    • 返回值的类型注解
  2. 函数(方法)的类型注解语法?
    在这里插入图片描述
    注意,返回值类型注解的符号使用: ->

3、Union类型

在这里插入图片描述

使用Union进行联合类型注解

在这里插入图片描述

总结

  1. 什么是Union类型?
    使用Union可以定义联合类型注解
  2. Union的使用方式
    • 导包from typing import Union
    • 使用:Union[类型, …, 类型]

九、多态

多态的概念

在这里插入图片描述

抽象类(接口)的编程思想

在这里插入图片描述
在这里插入图片描述

总结

  1. 什么是多态?
    多态指的是,同一个行为,使用不同的对象获得不同的状态。
    如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态
  2. 什么是抽象类(接口)
    包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(pass)称之为抽象方法
  3. 抽象类的作用
    多用于做顶层设计(设计标准),以便子类做具体实现。
    也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法
    并配合多态使用,获得不同的工作状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1332308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】【线性回归】梯度下降

文章目录 [toc]数据集实际值估计值估计误差代价函数学习率参数更新Python实现线性拟合结果代价结果 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 , 2 , \cdots , m (x(i),y(i)),i1,2,⋯,m 实际值 y ( i ) y^{(i)} y(i) 估计值 h …

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

事务相关知识

库存问题 先扣库存–>如果订单服务崩溃了&#xff0c;但是库存服务没有崩溃&#xff0c;这个时候库存扣减成功了&#xff0c;那么就会库存不能归还,&#xff0c;无法回滚。 后扣库存–>1&#xff1a;调用库存服务失败(比如网络抖动&#xff0c;库存服务挂了)–>回滚。…

VSCode运行时弹出powershell

问题 安装好了vscode并且装上code runner插件后&#xff0c;运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果。 解决方法 打开系统cmd ,在窗口顶部条右击打开属性&#xff0c;把最下面的旧版控制台选项取消&#xff0c;即可

python区块链简单模拟【01】

完整代码 https://gitee.com/ihan1001 https://github.com/ihan1001 重点&#xff1a;时间戳&#xff0c;MD5哈希&#xff0c;SHA256哈希&#xff0c;base64一种用64个字符表示任意二进制数据的方法&#xff0c;ECC椭圆曲线算法 import time time.time()datetime.now().strfti…

Ignite内存配置

配置内存 #1.内存架构 #1.1.概述 Ignite内存架构通过可以同时在内存和磁盘上存储和处理数据及索引&#xff0c;得到了支持磁盘持久化的内存级性能。 多层存储的运行方式类似于操作系统&#xff08;例如Linux&#xff09;的虚拟内存。但是这两种类型架构之间的主要区别是&…

懒加载图片案例

整体效果&#xff1a; HTML部分&#xff1a; <div class"lazy-box"><img class"lazy" data-original"img/1.jpg" alt"1.jpg" width"960" height"540"><img class"lazy" data-original…

MySQL 数据库系列课程 04:MySQL Workbench的安装

Workbench 是 MySQL 官方推出的免费的强大的可视化工具&#xff0c;不熟悉命令行工具的人&#xff0c;可以安装这一款软件&#xff0c;通过编写 SQL 进行数据库中数据的增删改查操作&#xff0c;接下来我们详细说明一下 Workbench 的安装。 一、Windows安装Workbench &#x…

怎么为pdf文件添加水印?

怎么为pdf文件添加水印&#xff1f;PDF是一种很好用的文件格式&#xff0c;这种格式能够很有效的保护我们的文件&#xff0c;但有时可能还会被破解&#xff0c;这种时候在PDF上添加水印就是比较好的方法。 综上所述&#xff0c;PDF是保密性很强的文件&#xff0c;但添加水印能够…

深度学习入门(python)考试速成均方误差

均方误差 表示神经网络的输出&#xff0c;表示监督数据&#xff0c;表示数据的维度。 这里神经网络的输出y是softmax函数的输出 数组元素的索引从第一个开始依次对应数组“0”&#xff0c;“1”&#xff0c;“2”&#xff0c;...... 由于softmax函数的输出可理解为概率 由此…

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC&#xff0c;每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时&#xff0c;Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…

LeetCode 剑指 Offer II 054. 所有大于等于节点的值之和

给定一个二叉搜索树&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&#xff1a; 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须…

网络监测之如何保障企业业务系统安全?

网络信息安全在网络时代的重要性不言而喻。随着互联网的普及和数字化进程的加速&#xff0c;网络已经成为人们生活、工作和学习的重要平台。在这个平台上&#xff0c;信息交流、数据存储、在线支付等都需要依赖于网络信息安全。其中企事业单位业务系统安全值得关注。 企事业单…

前端未死,顺势而生

随着人工智能和低代码的崛起&#xff0c;“前端已死”的声音逐渐兴起。前端已死&#xff1f;尊嘟假嘟&#xff1f;快来发表你的看法吧&#xff01; 一、“前端已死”因何而来&#xff1f; 在开始讨论之前&#xff0c;首先要明确什么是“前端”。 所谓前端&#xff0c;主要涉及…

计算机图形学理论(3):着色器编程

本系列根据国外一个图形小哥的讲解为本&#xff0c;整合互联网的一些资料&#xff0c;结合自己的一些理解。 CPU vs GPU CPU支持&#xff1a; 快速缓存分支适应性高性能 GPU支持&#xff1a; 多个 ALU快速板载内存并行任务的高吞吐量&#xff08;在每个片段、顶点上执行着色…

概率中的 50 个具有挑战性的问题 [05/50]:正方形硬币

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

Spring Security 6.x 系列(12)—— Form表单认证登录注销自定义配置

一、前言 在本系列文章中介绍了 Form 表单认证和注销流程&#xff0c;对部分源码也进行详细分析。 本章主要学习 Spring Security 中表单认证登录注销的相关自定义配置。 二、自定义登录页面 Spring Security 表单认证默认规则中对未认证的请求会重定向到默认登录页面&…

固定效应模型-以stata为工具

固定效应模型-以stata为工具 文章目录 1.固定效应模型2. 模型原理3. `stata`代码实现1.固定效应模型 固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学…

快速剪辑视频软件,视频图像翻转软件

在这个信息爆炸的时代&#xff0c;视频已经成为了人们获取信息、娱乐、学习的主要方式之一。一个好的视频&#xff0c;不仅可以吸引观众的眼球&#xff0c;更可以传达出深层次的意义。那该什么快速的编辑视频&#xff0c;有没有好用的工具推荐呢&#xff1f;今天小编就给大家介…

Pytorch项目(模型训练与优化),肺癌检测项目之六

数据优化方案 数据优化方案1&#xff1a;重复抽样 &#xff08;1&#xff09;对多数类的样本实施欠采样&#xff0c;减少多数类数量 &#xff08;2&#xff09;对少数类的样本实施过采样&#xff0c;增加少数类数量 数据优化方案2&#xff1a;数据增强 数据增强&#xff08…