当前位置: 首页 > news >正文

python类

        python是一种面向对象的变成语言。

        python几乎所有的东西都是对象,包括对象和属性。

一.类的定义

        python类的定义:

class ClassName:pass:

        实例:

注意:        

  •  类中的函数称为方法,有关于函数的一切适用于方法,唯一的区别在于函数的调用方式。
  • 方法__init__()是一个特殊的方法,每当你根据类进行实例化时(创建对象),Python都会自动调用,方法名是一种约定,旨在避免与普通方法发生冲突。相当于C++中的构造函数。
  • 当使用类实例化的对象,调用类中的方法时,Python会自动将实例化的对象传入,类中的方法必须用一个变量接收,如实例中的self变量(变量名可以随便取)。使用该变量调用实例中的方法和属性。

  • 类的组成包括:类的属性,实例方法,静态方法,类方法。类名在python中也是对象,是一个没有实例(实例属性和方法)的对象。

类的属性:分为实例属性和类属性。

        实例属性是指在实例化一个类时动态添加到实例对象中的变量,可以通过实例化对象访问。

        类属性是指被类的所有实例化对象,包括类名本身对象共享的变量,可以通过类名或类的实例化对象访问。类属性就是静态属性。

 实例方法,静态方法和类方法:python实例方法,类方法和静态方法区别_两片空白的博客-CSDN博客

二.类实例化对象

  • 对象创建和属性方法的使用

实例对象=类名()

使用通过'.'点操作符来访问属性和方法。

  • 实例方法的调用有两种方式:

实例对象.方法(...)

类名.方法(实例对象, ...)

my_dog=Dog("tager", 10)                                                         Dog.sit(my_dog)
  • 对象的打印__str__()方法

        当我们实例化一个类对象,使用print打印类对象时,得到的时对象的地址。没有得到对象的属性。

         可以在类中定义__str__()方法,print时会调用__str__()方法,__str__()方法中需要返回字符串类型。

三.封装

        封装的作用:一是可将属性和行为包装到类对象中,需要通过实例化对象或类名来访问。二是在变量或者函数名前加两个"_",使属性和方法实现私有化。只能在类中访问,不能在类外访问。

        python中实现私有化的方法比较的方法比较简单,即在准备实现私有化的方法和属性名字前面加两个下划线即可。类中所有双下划线的名称都会自动变成:_类名__数据名的形式。比如:__x,python会自动将其变形成:_类名__x。

         由于python将__x转化成了_类名__x,于是会有下面的情况:

        以_类名__x的形式可以访问到python的私有变量,这种情况是需要程序员来避免的。

四.继承

        在python中,一个类可以继承另外一个类。原有的类称为父类,而新的类称为子类。子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。

        没有在括号中填父类,默认继承object类。

        继承的作用可以实现代码的复用。

语法:

class 子类类名(父类1, 父类2...):pass

        4.1 子类的__init()__方法

        创建子类实例时,python首先需要完成的任务是给父类的所有属性赋值。在子类__init()__中实现。

        在实例化子类对象时,需要将子类和父类的成员都传入。

        4.2 方法和属性重写

  • 属性重写

  • 方法重写

        子类继承父类方法,当父类方法不符合子类行为时,可以对父类的方法进行重写。重写的条件在于,需要子类的重写的方法和父类方法同名(只需要方法名相同即可,参数不需要相同)。

        4.3 继承原理(MRO——方法搜索顺序)

  • 主要用于继承中方法和属性的调用顺序,这个MRO列表就是一个简单的所有基类的线性顺序列表。
  • python中针对类提供了一个内置属性__mro__可以查看搜索顺序,搜索方法和属性时按照MRO列表顺序来进行搜索的。
  • 而这个MRO列表的构造是通过一个C3线性化算法来实现的。

搜索方法和属性规则: 

  • 如果在当前类中找到方法直接执行,不再搜索。
  • 如果当前类中没有找到方法,玩后面的顺序找,找到后执行,不在搜索。
  • 如果在整个搜索顺序中都没有找到,程序报错。 
  • 使用super来查找和直接查找属性和方法都是这个规则。

        python的继承不像C++中的继承,会在派生类中继承成员变量,实例化对象时,也会创建基类的成员变量。这样会导致在菱形继承时,会出现变量的冗余和二义性。

        而python中的继承通过MRO机制避免了这个问题,按照列表顺序在基类中查找方法或者属性,而不是在子类中创建父类变量。

重写原理:

        按照mro顺序列表查找方法和属性时,当子类重写了方法或者属性,调用方法或者属性时,在子类中找到方法(与参数无关)和属性,不会继续搜索。 基类的方法和属性等价于被隐藏了。

        4.3 super()用法

        4.2.1 定义

        super()是python中调用父类(超类)的一种方法。在子类中可以通过super()方法调用父类的方法和属性。超类是指具有两层以上继承关系的类。

        4.2.2 作用

  • 在继承中让代码维护更加简单。
  • 解决菱形继承带来重复调用,查找顺序(MRO)问题。

        4.2.3 使用——通过super()来调用子类和父类同名的方法

  • 单继承

        super().add(num)确实调用了父类的add()方法,并且父类中的实例和子类中的实例地址相同,说明是一个实例self。在父类中的self.n实际是子类的n,所以算出来n的结果是7。

  • 多继承

 五.多态

        多态是在继承体系中,调用相同的方法,通过传入不同的对象,有不同的动作。

        python中的多态没有C++中这么复杂,由于python中的变量无序声明数据类型就可以赋值,python对变量赋值就是创建一个新的变量,这个变量就是对应的类型。

        python中的多态是通过子类继承父类子类重写父类的方法。在当使用该方法时,会根据变量的不同来调用不同的方法。

  • 非继承和多态,不同类中有相同方法。

        由于没有继承关系,所以不属于多态。

  •  多态,重写父类方法

 六.特殊属性和方法

        6.1 特殊属性

  • __dict__

        放回类中方法或属性的字典

  • __class__

  • __bases和__base__:使用类调用

__base__:输出第一个父类类型。

__bases__:输出父类类型的元组。元组每一个位置都是一个类类型,都可以定义变量。

  • __mro__

        输出继承了那些父类类型的元组,查找属性和方法的顺序表。

        6.2 特殊方法 

  • __subclasses__()

        输出子类列表。

  •  __add__():重载+操作符

类不支持'+'操作,支持需要实现__add__()方法。

  •  __len__()内置方法计算长度

        len()函数中会调用类的__len__()方法

  •  __new__()在创建对象时调用,__init__()在初始化对象时调用

        想看下图发现:

        实例化对象时,先调用的__new__方法,再调用__init__方法。

        cls地址和A类对象地址相同。新创建的对象的obj和a和__init__方法中的self相同。

        即,

  1. 在调用A的__new__时A对象地址赋值给了cls
  2. cls传给super().__new__方法,新建完的对象传给obj
  3. 调用完A的__new__后调用__init__,obj对象传给了self
  4. self初始化后赋值给了a。

 

相关文章:

python类

python是一种面向对象的变成语言。 python几乎所有的东西都是对象,包括对象和属性。 一.类的定义 python类的定义: class ClassName:pass: 实例: 注意: 类中的函数称为方法,有关于函数的一切适用于方法&…...

SpringBoot + layui 框架实现一周免登陆功能

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

如何使用Unity制作一个国际象棋

LinnoChess1.0 该项目旨在做一些Unity小游戏项目开发来练练手 如果有更新建议请私信RWLinno 项目地址:https://github.com/RWLinno/LinnoChess 目前效果 能够正常下棋;能够编辑棋盘;能够SL棋局;能够记录棋谱;能够显…...

下岗吧,Excel

ChatGPT的诞生使Excel公式变得过时。通过使用 ChatGPT 的代码解释器你可以做到: 分析数据创建图表 这就像用自然语言与电子表格交谈一样。我将向大家展示如何使用 ChatGPT 执行此操作并将结果导出为Excel格式: 作为示例,我将分析并创建美国…...

黑马点评环境搭建导入

一开始配置maven的时候,发现怎么都无法查看maven的版本,后来才知道是JAVA_HOME的问题,开头多了一个空格(因为我是直接复制过去的),然后搜网上通过命令行可以看到肉眼看不到的bug。 通过命令行的方式改正确后…...

交换机端口安全

文章目录 一、802.1X认证1. 定义和起源2. 认证方式本地认证远程集中认证 3. 端口接入控制方式基于端口认证基于MAC地址认证 二、端口隔离技术1. 隔离组2. 隔离原理3. 应用场景 首先可以看下思维导图,以便更好的理解接下来的内容。 一、802.1X认证 1. 定义和起源 8…...

【力扣】63. 不同路径 II <动态规划>

【力扣】63. 不同路径 II 一个机器人位于一个 m m m x n n n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格…...

【Linux】JumpServer 堡垒机远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…...

WebGPT VS WebGPU

推荐:使用 NSDT编辑器 快速搭建3D应用场景 随着WebGPU的引入,Web开发发生了有趣的转变,WebGPU是一种新的API,允许Web应用程序直接访问设备的图形处理单元(GPU)。这种发展意义重大,因为 GPU 擅长…...

【Flutter】Flutter 使用 collection 优化集合操作

【Flutter】Flutter 使用 collection 优化集合操作 文章目录 一、前言二、安装和基本使用三、算法介绍四、如何定义相等性五、Iterable Zip 的使用六、优先队列的实现和应用七、包装器的使用八、完整示例九、总结 一、前言 大家好!我是小雨青年,今天我要…...

【核心复现】基于合作博弈的综合能源系统电-热-气协同优化运行策略(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【设计模式】Head First 设计模式——抽象工厂模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 设计思想 提供一个接口,让该接口负责创建一…...

pdf怎么转换成jpg图片?

随着数字文档的广泛应用,将PDF转换为JPG图片格式成为了一个常见的需求。无论是为了在网页上展示内容,还是为了与他人分享图片,以下是一些简单的方法,帮助您将PDF文件快速转换为高质量的JPG图片。 方法一:在线PDF转JPG…...

远程访问Linux的DataEase数据可视化分析,有哪些推荐的工具?

DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。 在本地搭建后,借助cpolar 内…...

每日一题——旋转图像

旋转图像 题目链接 方法一:利用辅助数组 通过对示例的观察和分析,我们可以得到这样的结论: 对于原数组的下标为i行元素,顺时针旋转九十度后,都变成了下标为(n-1-i)列元素。如图所示&#xff…...

「Docker」《入门Docker:解放部署烦恼,提高开发效率》

《入门Docker:解放部署烦恼,提高开发效率》 一、引言1.1 Docker的定义和概念1.2 Docker的优势和应用场景 二、Docker基础知识2.1 Docker架构和组件2.2 Docker镜像和容器的关系2.3 Docker仓库和镜像的管理 三、安装和配置Docker环境3.1 安装Docker引擎3.2…...

数据结构--5.3图的遍历(广度优先遍历)

广度优先遍历&#xff1a; 广度优先遍历&#xff08;BreadthFirstSearch&#xff09;&#xff0c;又称为广度优先搜索&#xff0c;简称BFS。 要实现对图的广度遍历&#xff0c;我们可以利用队列来实现。 void BFSTraverse(MGraph G) {int i,j;Queue Q;for(i0;i<G.numVerte…...

SQL注入漏洞复现(CVE-2017-8917)

文章目录 搭建环境启动环境漏洞复现报错注入使用sqlmap 前提条件&#xff1a; 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub Docker Compose是 docker 提供的一个命令行工具&…...

Http 1.0 1.1 2.0 3.0 版本差别

Http 1.0 发布年份&#xff1a;1996 非官方标准 短链接&#xff1a;每一次请求都对应一次TCP的连接与释放 开销大&#xff1a;每次请求都要TCP的连接与释放队头阻塞&#xff1a;每次请求都必须等上一次请求获得响应之后&#xff0c;才可以发送&#xff1b;效率低下 缓存&…...

javaee spring 依赖注入之复杂类型的注入数组 集合 等

spring 依赖注入之复杂类型的注入 package com.test.pojo;import java.util.List; import java.util.Map; import java.util.Properties;/*** description:* projectName:testSpring* see:com.test.pojo* createTime:2023/8/27 14:39*/ public class AA {private int[] arr;pr…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...