Python 高阶语法

前言:

我们通过上篇文章学习了Python的基础语法,接下来我们来学习Python的高阶语法

1.初识对象

在Python中我们可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的

面向对象包含 3 大主要特性:
 封装
 继承
 多态

(内容靠后)

1.1使用对象组织数据

在程序中设计表格,我们称之为:设计类(class)

在程序中打印生产表格,我们称之为:创建对象

在程序中填写表格,我们称之为:对象属性赋值

2.成员方法

2.1类的定义和使用

的语法:

创建类对象的语法:

2.2成员变量和成员方法

我们可以看出,中:

• 不仅可以定义属性用来记录数据
• 也可以定义函数,用来记录行为

其中:

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

注意:

定义在类内部的函数,我们称之为方法

2.3成员方法的定义语法

在类中定义成员方法和定义函数基本一致,但仍有细微区别:

我们可以看到,在方法定义的参数列表中,有一个: self 关键字

self 关键字是成员方法定义的时候,必须填写的

• 它用来表示类对象自身的意思
• 当我们使用类对象调用方法的时候, self 会自动被 python 传入

注意:

在方法内部,想要访问类的成员变量,必须使用 self

例如:

不过,self 关键字,尽管在参数列表中,但是传参的时候可以忽略它

可以看到,在传入参数的时候, self 是透明的,可以不用理会它

3.类和对象

3.1面向对象编程

类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作
这种套路,称之为:面向对象编程

3.2语法

基于类创建对象的语法:

3.3在程序中通过类来描述

3.4基于类创建对象

4.构造方法

4.1属性(成员变量)的赋值

这种方法略显繁琐

4.2 __init__()构造方法

• 构建类时传入的参数会自动提供给 __init__ 方法
• 构建类的时候 __init__ 方法会自动执行

注意:

构造方法也是成员方法,不要忘记在参数列表中提供: self

5.魔术方法

5.1 __str__ 字符串方法

当类对象需要被转换为字符串之时,会输出如下结果(内存地址)

我们可以通过 __str__ 方法,控制类转换为字符串的行为

5.2 __lt__ 小于符号比较方法

直接对 2 个对象进行比较是不可以的

但是在类中实现 __lt__ 方法,即可同时完成:小于符号 和 大于符号 2 种比较

比较大于的魔术方法是:__gt__

5.3__le__ 小于等于比较符号方法

用法跟上面一样

5.4  __eq__ 比较运算符实现方法

注意:

不实现 __eq__ 方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象 == 比较一定是 False 结果

6. 封装

6.1对用户隐藏的属性和行为

现实世界中的事物,有属性和行为
但是不代表这些属性和行为都是开放给用户使用的

苹果越狱、安卓 root ,也是为了突破权限使用这些对用户隐藏的属性和行为

6.2私有成员

类中提供了私有成员的形式来支持。
• 私有成员变量
• 私有成员方法

定义私有成员的方式非常简单,只需要:
• 私有成员变量:变量名以 __ 开头( 2 个下划线)
• 私有成员方法:方法名以 __ 开头( 2 个下划线)

6.3使用私有成员

私有方法无法直接被类对象使用

私有变量无法赋值,也无法获取值

私有成员无法被类对象使用,但是可以被其它的成员使用

7.继承

7.1什么是继承?

继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)

代码的实现

并且,继承分为:单继承和多继承

7.2单继承

语法:

操作:

7.3多继承

Python 的类之间也支持多继承,即一个类,可以继承多个父类

如下:

语法:

操作:

注意:

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级

即:先继承的保留,后继承的被覆盖

7.4复写

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写

即:在子类中重新定义同名的属性或方法即可

7.5调用父类同名成员

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员

如果需要使用被复写的父类的成员,需要特殊的调用方式

方式1:

• 调用父类成员
使用成员变量:父类名 . 成员变量
使用成员方法:父类名 . 成员方法 (self)

方式 2 :
• 使用 super() 调用父类成员
使用成员变量: super(). 成员变量
使用成员方法: super(). 成员方法 ()

注意:

只能在子类内调用父类的同名成员
子类的类对象直接调用会调用子类复写的成员

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

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

相关文章

VitualBox虚拟机重启后配置无法保存,已安装软件变为没有安装

VitualBox虚拟机重启后虚拟机还原为上次开机的状态,安装的安装包配置啥的全部丢失。 按网上的配置了半天也没解决。最终用下面讨巧的办法,即不重启虚拟机。 我们不在重启虚拟机,那我们想关闭虚拟机的时候怎么办呢? 1、按下图所…

LangChain结合LLM做RAG文档搜索

我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现“幻觉”。针对“幻觉”问题,一般的解决方案是采用RAG做检索增强。 但是我们不可能把…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

PySide(PyQt)的QPropertyAnimation(属性动画)

学不完,根本学不完:(,感觉逐渐陷入了学习深渊。。。 QPropertyAnimation 是 PySide(PyQt) 中一个用于在时间轴上平滑地改变对象属性的类。它常用于制作动画效果,比如移动、缩放或改变透明度等。 基本概念 QPropertyAnimation 是 Qt …

C# 写入SQLServer数据库报错SqlException: 不能将值 NULL 插入列 ‘ID‘

private int id; [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//id自增 public int ID { get > id; set > id value; } 将ID属性下的标识规范由否改成是

活动预告|8月3日 Streaming Lakehouse Meetup · Online 与你相约!

随着大数据分析技术的发展,越来越多的企业采用了数据湖架构。基于 Lakehouse 的架构优势,结合 Flink 的 Streaming 实时流处理能力,Flink 推出了新一代的“Streaming Lakehouse”技术。这一技术旨在能够让数据在湖上自由流动,为用…

AI学习记录 - transformer的位置编码的理解

看完肯定懂,可能会更新 一看位置编码公式,感觉很懵逼 懵逼四点:(或者你还有其他不懂的点) 1、为什么使用正弦余弦公式?不可以使用其他公式? 2、为什么奇数位置使用余弦,偶数位置使…

FreeModbus学习——定时器

FreeModbus版本:1.6 协议栈初始化时会初始化定时器: eMBInit → eMBRTUInit → xMBPortTimersInit( ( USHORT ) usTimerT35_50us ) 协议栈使能时会使能定时器: eMBEnable → pvMBFrameStartCur → eMBRTUStart → vMBPortTimersEnable 定时…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中,通过对其核心设备变压器的故障进行检测,以此能够及时、准确的发现变压器的故障,基于单片机控制的变压器油压油温的故障检测的方法,利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

day08:订单状态定时处理、来单提醒和客户催单

文章目录 Spring Task介绍cron表达式入门案例 订单状态定时处理需求分析代码开发扩展 WebSocket介绍入门案例特点 来单提醒需求分析和设计代码实现 客户催单需求分析和设计代码实现 Spring Task 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时…

Dify 零代码 AI 应用开发:快速入门与实战

一、Dify 介绍 Dify 是一个开源的大语言模型 (LLM) 应用开发平台。它结合了后端即服务 (Backend-as-a-Service) 和 LLMOps (LLMOps) 的概念,使开发人员能够快速构建生产级生成式 AI (Generative AI) 应用。即使是非技术人员也可以参与 AI 应用的定义和数据操作。 …

鸿蒙UI系统组件10——菜单(Menu)

果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下面名片,关注公众号。 Menu是菜单接口,一般用于鼠标右键弹窗、点击弹窗等。 1、创建默认样式的菜单 菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件&am…

【MATLAB APP】建立独立桌面APP

背景:已有MATLAB APP的.mlapp文件,但客户提出需要可以直接使用的exe文件。 要求:点开即用,无需下载MATLAB。使用者无法修改APP的代码。 一、环境配置 APP创建者:安装MATLAB R2023a,配置Application Compile…

【SpringBoot】5 Swagger

官网 https://swagger.io/ 介绍 Swagger 是一套基于 OpenAPI 规范构建的开源工具,可以帮助开发者实现设计、构建、记录、使用 Rest API。 Swagger 是一款根据 Restful 风格生成的接口开发文档,并且支持做测试的一款中间软件。 Swagger主要包括三部分&…

AI绘画;Stable Diffusion再升级:学会以图生图!

前言 Stability AI 很高兴地宣布推出 Stable Diffusion Reimagine!我们邀请用户通过 Stable Diffusion 尝试图像并“重新构想”他们的设计。 Stable Diffusion Reimagine 是一种新的 Clipdrop 工具,它允许用户无限制地生成单个图像的多个变体。无需复杂…

科研绘图系列:R语言山脊图(Ridgeline Chart)

介绍 山脊图(Ridge Chart)是一种用于展示数据分布和比较不同类别或组之间差异的数据可视化技术。它通常用于展示多个维度或变量之间的关系,以及它们在不同组中的分布情况。山脊图的特点: 多变量展示:山脊图可以同时展示多个变量的分布情况,允许用户比较不同变量之间的关…

【Java基础语法】字符修改,以及equals的用法

前言: 小编这里将上一期String类型进行了补充,添加了字符串的修改,以及equals的用法内容,和hashcode的使用;上一期:http://t.csdnimg.cn/ijiM6 1.字符串的修改 在上一期中我们说到字符串是不能被修改的&am…

计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水,通过模型识别路段积水避开积水道路

大家好,我是微学AI,今天给大家介绍一下计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水,通过模型识别路段积水避开积水道路。今年第3号台风“格美”(强台风级)的中心今天(24日)早晨5点钟位于我国台湾省宜兰县东南…

多表查询的内连接与外连接

目录 1. 内连接 1.1 概述 1.2 等值连接 1.3 非等值连接 1.4 自连接 2. 外连接 2.1 概述 2.2 左/右连接 2.3 全连接 3. 多张表连接 1. 内连接 1.1 概述 查询满足条件的两张表数据,也就是两张表的交集; 内连接使用过程中,尽量对表重…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…