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 = nameself.age = agedef 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 = nameself.age = ageself.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 = nameself.age = ageself.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. 选择身边的一种事物,真实存在和虚拟存在都行,抽象该事物的特点和行为,定义一个类。要求设置这个类的某个属性具备默认值,需要定义修改某些属性的函数。最后实例化该类,调用函数,修改属性值。

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

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

相关文章

C语言中的内存分配方式(静态分配、动态分配)定义以及区别

在C语言中,内存分配主要有两种方式:静态分配(Static Allocation)和动态分配(Dynamic Allocation)。这两种方式在程序运行时对内存的管理和使用有着不同的特点和用途。 1. 静态分配(Static Allo…

Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )

上期链接:Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)-CSDN博客 上期我们聊了人物的受伤和死亡的逻辑和动画,我们主要学习了事件的执行,即我们在人物受伤时可能会触发很多的事件,比如触发人物受伤的动画以及播放音乐等…

LabVIEW电表改装与校准仿真系统

LabVIEW开发的电表改装与校准仿真实验平台不仅简化了传统的物理实验流程,而且通过虚拟仿真提高了实验的效率和安全性。该平台通过模拟电表改装与校准的各个步骤,允许学生在没有实际硬件的情况下完成实验,有效地结合了理论学习和实践操作。 项…

计算机组成原理(三)

文章目录 只读存储器和闪速存储器ROM 只读存储器光擦可编程只读存储器(EPROM) 闪速存储器 并行存储器双端口存储器多模块交叉存储器定量分析 相联存储器 只读存储器和闪速存储器 ROM 只读存储器 ROM ,只能读出不能写入,最大的优点是不易失性。 光擦可编程只读存储器…

Spring Security+Spring Boot实现登录认证以及权限认证

基本概念 “Authentication(认证)”是spring security框架中最重要的功能之一,所谓认证,就是对当前访问系统的用户给予一个合法的身份标识,用户只有通过认证才可以进入系统,在物理世界里,有点类似于“拿工卡刷门禁”的…

homework 2024.06.17 math, UI

A的宽度225 B的宽度150 这样画出来就比较标准, 225 * 2 150 * 3 2A 3B

【排序算法】希尔排序详解(C语言)

文章目录 前言希尔排序的原理原理思路 代码实现希尔排序的相关问题效率算法稳定性 前言 为什么会有希尔排序,要从插入排序说起,希尔排序一开始设计出来是为了改进插入排序,因为插入排序在处理大量数据时效率不高,特别是对于近乎有…

【MySQL】MySQL数据库基础|数据库的操作|常用数据类型|表的操作

目录 一、数据库的操作(针对“数据集合”的操作) 1.显示当前的数据库 2.创建数据库 3.使用数据库 4.删除数据库 二、常用数据类型 1.数值类型 2.字符串类型 3.日期类型 三、表的操作 1.列出当前数据库的表 2.创建表 3.查看表结构 4.删除表…

11.5.k8s中pod的调度-cordon,drain,delete

目录 一、概念 二、使用 1.cordon 停止调度 1.1.停止调度 1.2.解除恢复 2.drain 驱逐节点 2.1.驱逐节点 2.2.参数介绍 2.3.解除恢复 3.delete 删除节点 一、概念 cordon节点,drain驱逐节点,delete 节点,在对k8s集群节点执行维护&am…

CesiumJS【Basic】- #006 浏览器控制台查看位置角度

文章目录 浏览器控制台查看位置角度1 目标 浏览器控制台查看位置角度 1 目标 浏览器控制台查看位置角度

【ai】pycharm 配置直接运行远程代码

Jetbrains Gateway适合远程开发机比较固定的情况。 【ai】pycharm远程ssh开发 这种实际是本地代码同步过去跑。 类似vs 也是这样的 但是vscode 是直接远程访问,远程编辑并运行。 pycharm 看起来也是支持的。 就是麻烦一点。 参考这里 主要参考这位大神的:python开发之远程开发…

在 React 中使用 ArcGIS JavaScript SDK 构建地图应用

创建React工程 $ npx install -g create-react-app $ create-react-app my-react-arcgis-app $ cd my-react-arcgis-app $ npm start安装ArcGIS库 $ npm install arcgis/core创建ArcGIS地图组件 import React, { useEffect, useRef } from react; import Map from arcgis/co…

Vue3源码【二】—— watch侦听computed计算属性原理及简单实现

1、watch监听器 1.1、使用watch watch 需要侦听特定的数据源,并在单独的回调函数中执行副作用,然后下面就是使用watch的一个说明。 小声逼逼:我还是习惯用监听,后面的监听也就是侦听。 /*** param source 监听对象* …

KVB:怎么样选择最优交易周期?

摘要 在金融交易中,周期的选择是影响交易成败的重要因素之一。不同的交易周期对应不同的市场环境和交易策略,选择合适的周期可以提高交易的成功率。本文将详细探讨交易中如何选择最优周期,包括短周期、中周期和长周期的特点及适用情况&#…

软考系统规划与管理师伴读脑图第9章

周末发系统规划与管理师的试听视频,占用了发送次数,所以上周的脑图推迟了今天发出。 不知不觉已经发到了第9章,感叹这就是坚持积累下来的力量,其实考试也是一样的道理。

c++深拷贝、浅拷贝

在 C 中,深拷贝和浅拷贝是两个重要的概念,尤其在涉及动态内存分配和指针成员时。这两个概念描述了对象复制时的行为。 浅拷贝 浅拷贝是指复制对象时,仅复制对象的基本数据成员,对于指针成员,只复制指针地址&#xff…

Python面试题-1

1. 什么是Python? Python 是一种高级编程语言,由 Guido van Rossum 在 1989 年创立,旨在强调代码的可读性和简洁性。Python 是一种解释型语言,这意味着开发过程中没有必要先将程序编译成机器语言,而是直接运行源代码。…

12k star 项目 cmake-examples 阅读和点评

12k star 项目 cmake-examples 阅读和点评 Author: ChrisZZ Time: 2024.06.17 文章目录 12k star 项目 cmake-examples 阅读和点评项目概要01-basicA-hello-cmakeB-hello-headersC-static-libraryD-shared-libraryE-installingF-build-typeG-compile-flagsH-third-party-libra…

TensorFlow音频分类修复

原先传wav格式,后来发现前端生成的wav格式不完整 后端改mp3 其实是mp3和wav都可以接收 但问题是wav文件格式错误的话无法获取时长,这样也就是说只能传mp3,除非你对时长无所谓 修复TensorFlow放到生产后报错问题-CSDN博客 依赖 <dependency><groupId>org.ten…

Git--Part3--远程操作 配置 标签管理

theme: nico 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0…