Python学习----面向对象

news2025/1/11 15:03:34

面向对象思想就不说了,和java一样。这是为了自己能够一直看教程不走神做得笔记。

类的定义和赋初值

成员变量和成员方法,含义和java一样。
成员变量的申明没啥好记得
需要关注得是成员方法,在定义成员方法得时候,需要传入self关键字,这个就相当于java得this关键字。但是python需要在定义得时候手动传入,根据前面教程分析,要是你在成员方法内部直接使用name变量,python一定会认为你在成员方法内重新定义了一个name变量,所以使用self关键字来进行区分。没办法,这是python语法得特点。
在这里插入图片描述

构造方法

下图标记得成员变量可以不写,在你 init方法中给成员变量赋值得时候,如果你写了,就是赋值操作。
如果你不写,就是定义加赋值操作
在这里插入图片描述

魔术方法

内置得类方法称为,魔术方法。有很多,学习几个常见得

__init__    构造方法
__str__     字符串方法
__lt__   小于,大于符号比较
__le__  小于等于、大于等于符号比较
__eq__  == 符号比较

__str__方法

打印变量名,默认是打印对象内存地址。重写 str 方法可以更改
在这里插入图片描述
但是需要注意得是,str 这个方法需要返回值
在这里插入图片描述
要是没有返回值就会报错
在这里插入图片描述

lt 小于符号比较方法

在没有重写魔术方法直接使用会报错
在这里插入图片描述
直接对2个对象进行比较是不可以得,但是在类中实现 lt 方法,即可同时完成 小于符号 和 大于符号 两种比较
自己定义对象之间比较得规则
传入参数: other 另一个类对象
返回值: 布尔类型
比较规则:自己定义

对于 小于等于 和 大于等于 需要重写 le 方法。重写方式 和 lt 是一样得
在这里插入图片描述

eq 相等比较运算

如果没有重写 eq 方法,两个类对象名字 使用 == 是比较内存地址是否相等,永远是都返回 False
在这里插入图片描述

封装

封装、继承、多态

刚才在定义成员方法和成员变量 这些操作,就是在进行封装。

私有成员变量,私有成员方法 定义
对比 java真的很简单, 只需要在 成员变量或者成员方法 前面加两个下划线,就说明这个成员是私有得

和java一样只要是私有得,就不能直接通过类对象进行直接访问
在这里插入图片描述
同理,和java一样,需要通过其他方法进行访问
在这里插入图片描述

继承

单继承
语法: class 子类(父类)
在这里插入图片描述
多继承
语法: class 子类(父类1,父类2…)
如果父类中有成员同名,那么优先继承左边得,谁先出现谁优先级高。

如果子类中没有新功能,使用pass关键字替代。
在这里插入图片描述

复写

子类复写父类中得成员,在子类中重新定义同名得属性或方法
在这里插入图片描述
在子类中调用父类成员:
方法1 :super().成员变量 super().成员方法()
方法2 : 父类名.成员变量 父类名.成员方法(self)

在这里插入图片描述

类型注解

当我们调用方法,进行传参时, ctrl + p 弹出提示
如下图:当我们调用系统方法时,会有提示传什么类型参数,但是自己定义得函数调用时,是没有类型提醒得。
在这里插入图片描述
Python在3.5版本之后引入类型注解,以方便编辑器提示,也方便开发者对参数类型进行注解
只是一个备注,不影响程序运行。

变量的类型注解:

# 变量类型注解--------------------------------
# 1、告诉编辑器这个变量时什么类型
# 2、也方便以后开发工作
# 基础类型注解
var_1: int = 10
var_2: str = "test"
var_3: bool = True
# 类对象类型注解
test_zi: zi = zi()
# 基础容器注解
my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_dict: dict = {"key": 11}
# 容器类型详细注解
my_list2: list[int] = [1, 2, 3]
my_tuple2: tuple[int, str, bool] = (1, "test", True)
my_dict2: dict[str, int] = {"key", 12}

# 注释类型注解---------------------------------------
var_01 = 10  # type: int
my_list01 = [1, 2, 3]  # type: list
my_dict02 = {"key", 12}  # type:dict[str:int]

类型注解并不会真正对类型做验证和判断, 你要是标记为int ,但是实际传入得时str ,是不会报错的。

函数和方法的类型注解:
对参数的类型注解

def test_func(x: int, y: int):
    return x + y

对返回值的类型注解
def 函数名(形参…) -> 返回值类型

def test_func(x: int, y: int) -> int:
    return x + y

Union类型注解
例如: 当集合中出现多种类型数据
my_list = [1,2,“test”,True]
Union[str, int, bool] 表示这个list里面要么是 str ,要么是 int , 要么是 bool

from typing import union 
my_list: list[Union[str, int, bool]] = [1,2,"test",True]
my_dict: dict[str,Union[str, int]] = {"name":"test","age":13}

# 同样方法形参和返回值也使用
def func(data: Unoin[int,str]) -> Union[int,str]:
	pass

多态

类型注解就是在为Python的多态做准备。
在之前的学习中,方法的形参是不需要著名类型的。现在通过类型注解来注明类型,但是这个也不是强制性的。
在类型注解中,有学习到 pass 关键字。其实这个勉强对应java的接口。通过这两个条件,就可以形成Python的多态。
总的含义还是和java一样:父类接收子类

多态:同一个行为,使用不同的对象获得不同的状态
抽象类:含有抽象方法的类
抽象方法:方法体是空实现(pass)的方法
在这里插入图片描述

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

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

相关文章

设计模式学习笔记 - 组合模式

设计模式学习笔记 - 组合模式一、学校院系展示问题二、传统方案解决学校院系展示问题三、组合模式介绍1、基本介绍2、组合模式原理四、组合模式解决学校院系展示问题五、组合模式在JDK集合的源码分析六、组合模式的注意事项和细节一、学校院系展示问题 展示一个学校院系结构&am…

机器学习可视化技术(Towards Data Science)

介绍 作为任何数据科学项目的一部分,数据可视化在了解更多可用数据和识别任何主要模式方面发挥着重要作用。 如果能够使分析中的机器学习部分尽可能直观,那不是很好吗? 在本文中,我们将探讨一些可以帮助我们应对这一挑战的技术&am…

HCIA 链路聚合与LACP

一、前言 虽然很多文章在介绍链路聚合时会从链路备份的角度来介绍链路聚合的作用,然后再说其有提升链路带宽的作用,但我感觉链路聚合主要还是提升链路带宽的作用,链路备份只是顺带的不是主要目标。 二、链路聚合 考虑下面的网络&#xff0…

Windows 环境下的 Socket 编程 3 - 基于 TCP 的服务器/客户端

基于 TCP 的服务器端/客户端 绝大多数 TCP 服务器端都按照如下顺序调用: 在 Windows 环境下,代码表示为: WSADATA wsaData;SOCKET hServSock, hClntSock;SOCKADDR_IN servAddr, clntAddr;int szClntAddr;/*Windows 环境 Socket 编程必须*/i…

leetcode:6243. 到达首都的最少油耗【变种子树大小统计 + 从边的角度出发 + 思维转换】

目录题目截图题目分析ac code总结题目截图 题目分析 0作为root从边的角度出发每个点都向0的方向聚集比如大家已经由四面八方聚集到了x,x的fa固定的,假设为y那么x到y要多少辆车?设size(x)为x子树大小x到y需要ceil&…

2022年第十三届蓝桥杯大赛湖南中医药大学第2场选拔赛(部分总结)

文章目录2008: 简单整数问题2005: 飞行棋2074: 几乎回文串2101: 通行密令2089: 密码1867: X星救援站2085: 千里走单骑2093: 最长等比子序列2087: 跳水比赛总结2008: 简单整数问题 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 小明最近经常会思考一些关…

Oracle-AWR快照无法自动生成问题分析

前言: 近期处理了一起数据库AWR快照无法自动生成的问题,用户发现数据库在近期出现了AWR快照无法自动生成的问题,数据库整体负载正常,后面分析发现原因是由于AWR快照在生成过程中,执行的SQL语句出现超时导致。 问题: Oracle11.2.…

【课上笔记】第八章 图

图 8.1图的基本概念 8.1.1图的定义和术语 1.图的定义 ​ 图(Graph)由一个顶点集合Vn和一个边(或者弧)集合En组成,通常记为: G=(Vn,En)其中,Vn中有n(n>0)个顶点,En中有e&#…

stm32cubemx hal学习记录:FreeRTOS任务管理

一、基本配置 1、配置RCC、USART1、时钟84MHz 2、配置SYS,将Timebase Source修改为除滴答定时器外的其他定时器,因为滴答定时器被用于时钟基准,可以实现任务切换。Timebase Source是实现HAL_Delay等延时函数的 3、初始化LED的两个引脚 4、开…

HTTP VS HTTPS

一、网络协议 网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。 二、HTTP与HTTPS 1、HTTP (1&am…

Autoware中的点云3D聚类算法,保姆级算法阅读注释,一看就懂,非常详细!

综述 五大模块&#xff0c;看完等于点云入门~&#xff08;dog&#xff09; 实际步骤 输入激光雷达获得的点云 pcl::PointCloud<pcl::PointXYZ>::Ptr header:seq:序列长度stamp:获取点云的时刻frame_id:坐标系名称 points:保存点云的容器,类型为std::vector width:类型…

大小端的判断

1.关于进制 1.1 进制数与位数 n进制数中&#xff0c;一位最多表示到数字n-1 十进制中1位最多能表示9个数字 满则溢&#xff0c;溢则进位。 拿我们最常用的是10 进制来举例说明&#xff0c; 构成十进制的最小单位数: 1 2 3 4 5 6 7 8 9 0 十进制(其实只有从9到0这几个数字,1…

OSPF笔记(四):OSPF五种报文和五种常见LSA

一、OSPF五种报文 (使用IP承载&#xff0c;可靠&#xff09; 1.1 hello&#xff1a; 发现和维护邻居关系 &#xff0c;以太网10s一次 1.2 DBD&#xff1a; 发送链路状态数据库摘要 1.3 LSR&#xff1a; 请求发送特定的链路状态信息&#xff08;请求包&#xff09; 1.4 LSU&…

Pr2023(Premiere Pro)中文版软件下载「附带安装教程」

Premiere Pro 23.0 版专为帮助编辑人员制作创意内容而设计&#xff0c;提供了出色的字幕工具组合。借助改进功能&#xff08;如批量编辑时间轴中的标题剪辑、灵活的对齐控件等&#xff09;简化您的标题和图形工作流程。此版本包含稳定性和性能方面的基础改进&#xff0c;包括更…

用 Flutter 轻松做个红包封面

前言 在 Flutter 的开发中&#xff0c;最常见的就是层层的组件嵌套&#xff0c;因此不可避免会遇到子组件如何适配父组件的问题。比如&#xff0c;按钮的可点击区域是否要占满整个父组件&#xff1f;图片是居中还是居左&#xff1f;这些问题可以通过 Flutter 提供的FittedBox …

Rancher - 更换Linux发行版

Rancher - 更换Linux发行版 时间&#xff1a;2022年11月20日21:24:29 推荐&#xff1a;Linux CentOS7.9 一、为什么要更换/升级&#xff1f; CentOS7.9 停止维护时间 2024年06月30日 AnolisOS8 阿里云推出的Linux发行版&#xff0c;支持多计算架构&#xff0c;也面向云端场景…

公众号免费搜题系统搭建

公众号免费搜题系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

算法篇-------贪心2

文章目录题目1-------活动选择题目2-----无重叠区间题目3------最多可以参加的会议数目题目4-------去除重复字母题目5------移掉K位数字题目6-----拼接最大数题目1-------活动选择 有n个需要在同一天使用同一个教室的活动a1, a2, …, an&#xff0c;教室同一时刻只能由一个活…

MapReduce基础

MapReduce入门 理解MapReduce的思想 MapReduce的思想核心是先分再合&#xff0c;分而治之所谓的分而治之&#xff0c;就是把一个复杂的问题&#xff0c;按照一定的分解方法分为等价的规模的若干部分&#xff0c;然后捉个解决&#xff0c;分别找出各个部分的结果没然后将各个部…

【学习笔记】mac安装maven与idea自带maven

一、安装Maven 1.1 场景一&#xff1a;mac安装Maven step1: 下载maven 到 maven官网下载压缩包&#xff0c;这里下载 apache-maven-3.8.6-bin.zip 压缩包&#xff1a; step2: 解压安装 解压maven压缩包&#xff0c;将解压得到的maven文件夹 “apache-maven-3.8.6” 放到合适…