当前位置: 首页 > 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…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...