Python学习笔记12:进阶篇(一),类的相关知识

前言

在讲类之前,我们简单介绍一些Python的知识。这些知识在入门篇没讲,想学Python的,基本都对Python有基础的了解,但是今天开始的进阶知识,会涉及到一些Python的特性,所以在这里介绍一下。
Python是一种高级、通用的编程语言,由Guido van Rossum在1989年底发明,并于1991年首次发布。

以下是Python的一些基本信息:

  1. 易读性与简洁性:Python以其清晰的语法和可读性强而著称,经常被描述为“接近自然语言”的编程语言,适合初学者学习,同时也被专业开发者广泛采用。
  2. 解释型语言:Python是一种解释型语言,意味着代码在执行时被逐行解释成机器语言,而不是事先编译成可执行文件。
  3. 跨平台:Python可在多种操作系统上运行,包括Windows、Linux、macOS等,具有很好的跨平台兼容性。
  4. 广泛的标准库:Python自带一个庞大且功能丰富的标准库,覆盖了网络编程、文本处理、数据库访问、图形用户界面等多个领域,便于开发者快速实现功能。
  5. 面向对象:如前所述,Python支持面向对象编程范式,允许定义类和对象,实现封装、继承和多态。
  6. 动态类型系统:Python是动态类型的,变量不需要预先声明类型,类型可以在运行时自动推断。
  7. 支持多种编程范式:除了面向对象编程,Python还支持过程式编程、函数式编程等多种编程风格。
  8. 强大的第三方库:Python拥有活跃的社区和海量的第三方库,如NumPy、Pandas用于数据分析,Django、Flask用于Web开发,TensorFlow、PyTorch用于机器学习等,极大丰富了其应用领域。
  9. 广泛应用:Python广泛应用于Web开发、数据科学、人工智能、自动化脚本、爬虫、教育等领域。
  10. 版本更新:当前Python有两个主要版本在使用中,分别是Python 2(不再维护)和Python 3(当前推荐使用的版本),两者之间存在一些不兼容的改变。

今天我们重点了解第五点,面向对象。今天的内容也从这里开始。

面向对象

什么是面向对象

面向对象(Object-Oriented Programming, OOP)是一种编程范式,它以“对象”为核心,将数据和操作数据的方法组织在一起,以此来模拟现实世界中的实体及其相互关系。

面向对象编程强调以下四个基本原则:

  1. 封装(Encapsulation):封装是指将数据(属性)和操作这些数据的方法(行为)捆绑在一起,并对外界隐藏其实现细节的过程。这样可以减少模块间的耦合,提高代码的安全性和复用性。
  2. 继承(Inheritance):继承允许创建一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用。子类可以覆盖或扩展父类的功能,以适应更具体的需求。
  3. 多态(Polymorphism):多态意味着一个接口可以有多种不同的实现方式。在面向对象的程序设计中,多态允许使用一个接口来表示多种类型的对象,从而让代码更加灵活和可扩展。
  4. 抽象(Abstraction):抽象是从具体事物中抽取关键特性和行为,忽略非本质细节,形成类或接口的过程。抽象类或接口提供了统一的操作接口,但可能并不包含具体的实现细节。
    通过这些原则,面向对象编程鼓励模块化和代码重用,使得大型软件项目的开发、维护和理解变得更加容易。

面向对象编程有哪些好处

  1. 封装(Encapsulation):
    • 提高数据安全性,通过限制直接访问对象内部状态,防止数据被误用或恶意修改。
    • 增强代码模块性,每个对象负责自己的行为和状态,使得代码易于理解、维护和调试。
  2. 继承(Inheritance):
    • 促进代码复用,子类可以继承父类的属性和方法,避免重复编写相似代码。
    • 支持层次结构,通过继承构建类的层次,使得代码组织更加有序,便于管理和扩展。
  3. 多态(Polymorphism):
    • 提升代码灵活性,允许使用一个接口来表示多种类型的对象,使程序能够在不修改现有代码的情况下应对变化。
    • 简化接口使用,用户无需了解对象的具体类型就能调用其方法,增加了代码的通用性和可扩展性。
  4. 模块化(Modularity):
    • 通过将复杂的系统分解为一系列相互协作的对象,使得问题更容易管理。
    • 改进团队协作,不同开发者可以独立工作于不同的模块,提高开发效率。
  5. 易维护性和可扩展性:
    • 更改通常仅限于单个对象或类,不会对整个系统造成广泛影响,降低了维护成本。
    • 新功能可以通过添加新类或修改现有类来轻松实现,支持系统的逐步进化。
  6. 抽象(Abstraction):
    • 通过抽象类和接口,将实现细节与高层逻辑分离,使得程序员可以专注于解决问题的逻辑而非底层机制。
    • 有助于设计阶段的概念清晰表达,便于讨论和验证系统架构。

上面这些,都是在学习类之前,要了解的东西。在面向对象编程的语言中,类是非常重要的。而Python,也是面向对象编程的一门语言。

什么是类

类(Class)是面向对象编程的基础构造块,用于定义具有相同属性(成员变量)和方法(成员函数)的对象的蓝图。

怎么定义一个类

class Person:
	"""简单模拟人,抽象出一个类"""
	
    def __init__(self, name, age):
    """初始化人的属性:名称,年龄"""
        self.name = name
        self.age = age
    
    def introduce(self):
    """模拟人做自我介绍,这是一种行为"""
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

如代码所示,使用class关键字,可以定义出一个类。那么这类为什么这么定义呢?

抽象化:简单来说就是总结规律,进行归纳,你可以把这个叫做抽象。

简单讲讲具体步骤:

  1. 使用class定义一个类,比如我们定义了一个person类。这个类,是某种对象的模拟。也就是说,我们通过对某种对象进行观察总结后,使用代码来模拟出这个对象。注意类名首字母大写,如果是多个单词每个单词首字母大写。
  2. 定义出类以后,我们需要总结归纳一下我们定义的类有哪些特点信息。比如人都有名字,有年龄,有性别,有身高,有体重等等。这些东西,在类里面叫做属性,又叫做成员变量。
  3. 总结出属性以后,我们需要把这些属性初始化设置给类。
  4. def init()。使用这个语法进行属性的定义和初始化,注意self是固定句式,第二个开始的才是属性。
  5. 除了对象的特点信息可以抽象成属性外,对象的某些特定的行为,我们也可以抽象称为类的函数,通过调用这个函数,就相当于对象进行了这个行为。
  6. 定义一个类的函数。def function_name。这个就不多讲了,刚学完。

这几个步骤下来,我们已经抽象出了一个person类。接下来学习怎么使用类。

怎么使用类

抽象出类以后,怎么使用这个类?
类是抽象出来的,一个抽象的东西肯定是要具现化出来才好使用的,我们大部分时候使用,也都是具现化以后进行使用。那么通过类具现化出来的东西,称之为实例。这个过程,也可以称作类的实例化。

# 实例化
moon = Person("明月", 28)
look = Person("望", 29)
# 太长了 就不用英文了,大家别学我
qiu_si = Person("秋思", 30)

# 操作一下,这三个实例调用一下introduce函数,这就是在模拟这个类的一种行为

在这里插入图片描述
上面就是一个简单的定义类后,实例化类,再执行类函数的示例。

这是类的简单使用。类的使用当然不止这些,但是我们现在先学习这些,慢慢的我们会深入的,别急。

属性的简单操作

  1. 设置默认值:很多时候,我们定义的类有某些属性在某些场景下的值是固定,比如我们出生的时候,国家都固定是中国,我们都是中国人,我们就不需要通过单独赋值来设置country这个属性,而是通过设置默认值来简化代码。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.country = "中国"  # 设置默认值

    def introduce(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old, i come from {self.country} .")  # 修改下打印信息


在图片中,我们给person设置了一个属性为country,并且设置了值为"中国"。这个时候我们实例化类出来的三个实例,在我们没有设置实例的时候,自动的设置了中国。

  1. 设置属性值:很多时候,我们实例化出来的实例对象,在程序运行过程中的属性值并不是一成不变的,而是会根据各种条件发生变化,那么我们应怎么设置属性值呢?通常有三种方法。

    • 对象名.属性名的方式进行赋值
    # 实例化
    moon = Person("明月", 28)
    look = Person("望", 29)
    # 太长了 就不用英文了,大家别学我
    qiu_si = Person("秋思", 30)
    
    # 修改属性的值
    moon.age = 29
    look.age = 30
    qiu_si.age = 31
    
    # 调用实例的方法
    moon.introduce()
    look.introduce()
    qiu_si.introduce()
    

    在这里插入图片描述
    我们实例化出三个实例对象后,使用对象名.属性名的方式修改了三个实例的年龄,最后输出的年龄也正是修改后的年龄。

    • 通过函数修改属性的值:在类中定义一个函数,根据自己的想法设置属性值。

    我们在类里面定义了一个新的函数,用于设置age的值。在实例化以后,通过调用这个函数,修改三个实例age的属性值。

    	class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            self.country = "中国"  # 设置默认值
    
        def introduce(self):
            print(f"Hello, my name is {self.name} and I am {self.age} years old, i come from {self.country} .")  # 修改下打印信息
    
        def change_age(self, age):
            self.age = age
    
    
    # 实例化
    moon = Person("明月", 28)
    look = Person("望", 29)
    # 太长了 就不用英文了,大家别学我
    qiu_si = Person("秋思", 30)
    
    # 修改属性的值
    moon.change_age(27)
    look.change_age(28)
    qiu_si.change_age(29)
    
    # 调用实例的方法
    moon.introduce()
    look.introduce()
    qiu_si.introduce()
    

    在这里插入图片描述

作业

  1. 总结一下什么是面向对象编程?了解一下什么是面向过程编程。
  2. 选择身边的一种事物,真实存在和虚拟存在都行,抽象该事物的特点和行为,定义一个类。要求设置这个类的某个属性具备默认值,需要定义修改某些属性的函数。最后实例化该类,调用函数,修改属性值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库与数据挖掘(期末复习)

数据仓库与数据挖掘(期末复习) ETL的含义Extract 、 Transformation、Load。 ODS的全称Operational Data Store。 DW全称 Data Warehourse DM全称是Data Mart 数据仓库数据抽取时所用到技术是增量、全量、定时、调度 STAGE层作用是提供业务系统数据…

HTC手机卷土重来,价格和配置给我看麻了

第一眼看到我是不敢相信的,HTC 竟然还活着。 提到 HTC,相信不少同学会发出「那是我在夕阳下奔跑并逝去的青春」这样的感叹吧。 曾经辉煌一时的手机大佬,市占率曾一度达到 15%。 璀璨就如同天边一闪而过的流星。关于它的风光地位,…

FinalShell 连接虚拟机超时,主机ping不通虚拟机,解决

出现问题: 连接主机...java.net.ConnectException: Connection timed out: connect 在排查错误时发现: 虚拟机内能互相ping通,虚拟机能ping通主机 但是主机的cmd命令ping不通虚拟机 问题原因: 虚拟机内能互相ping通&#xff0…

基于Java+Swing贪吃蛇小游戏(含课程报告)

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

计算机组成原理历年考研真题对应知识点(数制与编码)

目录 2.1数制与编码 2.1.1进位计数制及其相互转换 【命题追踪——采用二进制编码的原因(2018)】 【命题追踪——十进制小数转换为二进制小数(2021、2022)】 2.1.2 定点数的编码表示 【命题追踪——补码的表示范围(2010、2013、2014、2022)】 【命题追踪——补码和真值的相…

Debian/Ubuntu linux安装软件

1、官方软件商店安装 2、deb包安装 报错不是sudoers,首先将用户添加到sudo su -l adduser USERNAME sudo exit然后,退出桌面环境并再次登录。 您可以通过输入以下内容来检查上述过程是否成功: groups下载deb包 altshiftf4或右键打开命令行…

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题,开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…

XZ后门故事:初始分析

2024年3月29日,Openwall OSS安全邮件列表上的一条消息“炸醒”了整个信息安全、开源和Linux社区:XZ出现了一个CVSS评分10.0的恶意后门。 这个后门库的特殊危险在于OpenSSH服务器进程sshd使用它。在多个基于systemd的发行版上(包括Ubuntu、De…

信用VS抵押:贷款的两面镜子

说到贷款这事儿,大家首先想到的可能是有稳定工作、房子或车子的人。 其实,没这些也能贷款,比如咱们还在学校时,银行就来办信用卡了,这就是信用借款的起点。 毕业后,刚工作没钱又想闯,不少人宁愿…

C# 通过Win32API设置客户端系统时间

在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,预计2024-06-01 00:00:00到期,如果客户手动修改了客户端电脑时间,往前调整了一年,则软件就可以继续使用一年&…

【产品经理】订单处理4-拆单策略

上次讲解了订单的促销策略,本次讲解下订单处理过程中的拆单策略。 订单拆单策略分为自动拆单、手动拆单,拆单时机也分为订单未被审核前拆单、订单审核后因仓库/快递情况的拆单,本次主要讲解订单未被审核前拆单、订单审核后快递超重的拆单&am…

SQL注入-上篇

SQL注入 注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器,这些恶意数据可以欺骗解释器,从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sq…

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack,由Vercel开源,是下一代高性能的JavaScript应用构建工具,目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能,它专注于缩短加载时间&…

分析线程池的构造过程,追踪核心成员变量

分析线程池的构造过程,追踪核心成员变量 1、背景2、核心参数3、这样设计的好处1、背景 上图是对线程池原理的一个详细的表达,它体现了线程池的几个核心概念,具体是哪些概念呢,让我们一起来探索。 2、核心参数 首先通过对Executors创建线程池的方法签名的分析,我们会发现…

简单一招实现计件工资的核算

现在很多工厂都采用计件工资的管理办法,这充分体现了多劳多得、按劳取酬的薪资分配原则,同时鼓励先进鞭策后进,奖勤罚懒,摒弃计时工资的“大锅饭”心态,提高了企业的整体运作效率。 计件工资的难题 但是在实际的操作中…

马斯克的薪酬风波:一场560亿的激励之战

引言 在2024年的特斯拉股东大会上,埃隆马斯克成功获得了价值560亿美元的薪酬激励,这一事件引起了广泛关注和讨论。这次股东大会不仅标志着特斯拉在AI和机器人领域的战略布局,同时也揭示了马斯克在公司治理和薪酬激励机制中的独特策略。本文将…

第2讲:pixi.js 绘制HelloWorld

基于第0讲和第1讲,我们增添了vite.config.ts文件。并配置了其他的http端口。 此时,我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容: import {Application, Text} from pixi.js import ./style.css// 指明…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号,发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成(主机)或(从机) 1.8 实现效…

关于禁止word的无用插入模式

这是我的word版本号 点击左上角文件选项 找到左侧最下方的选项 点击高级 把这两个叉掉