如何系统的学习Python——特殊方法(魔法方法)

Python中,特殊方法,也被称为魔法方法或双下划线方法,是在类定义中具有特殊名称的方法,它们用于实现类的特定行为

这些方法以双下划线开头和结尾,例如 __init____str____add__ 等。下面是一些常用的特殊方法以及它们的作用:

1. __init__ - 初始化方法:

class MyClass:def __init__(self, x, y):self.x = xself.y = y# 使用初始化方法创建对象
obj = MyClass(1, 2)

__init__ 方法在对象创建时被调用,用于初始化对象的属性。

2. __str__ - 字符串表示方法:

class MyClass:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return f"MyClass instance with x={self.x} and y={self.y}"# 使用str()或print()获取对象的字符串表示
obj = MyClass(1, 2)
print(obj)  # 输出: MyClass instance with x=1 and y=2

__str__ 方法定义了对象在被打印或使用 str() 函数时的字符串表示。

3. __len__ - 获取对象长度方法:

class MyList:def __init__(self, items):self.items = itemsdef __len__(self):return len(self.items)# 使用len()获取对象的长度
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))  # 输出: 5

__len__ 方法定义了对象在调用 len() 函数时的行为。

4. __add__ - 定义对象相加行为:

class Point:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other_point):return Point(self.x + other_point.x, self.y + other_point.y)# 使用+运算符定义对象相加的行为
point1 = Point(1, 2)
point2 = Point(3, 4)
result_point = point1 + point2
print(result_point.x, result_point.y)  # 输出: 4 6

__add__ 方法定义了对象在使用 + 运算符时的行为。

5. __getitem____setitem__ - 获取和设置对象的元素:

class MyList:def __init__(self, items):self.items = itemsdef __getitem__(self, index):return self.items[index]def __setitem__(self, index, value):self.items[index] = value# 使用[]运算符获取和设置对象的元素
my_list = MyList([1, 2, 3, 4, 5])
print(my_list[2])  # 输出: 3
my_list[2] = 10
print(my_list.items)  # 输出: [1, 2, 10, 4, 5]

__getitem____setitem__ 方法定义了对象在使用 [] 运算符获取和设置元素时的行为。

以上只是特殊方法中的一小部分,Python中有许多其他特殊方法,每一个都有其特定的用途。特殊方法允许类更好地与Python的语法和内建函数集成,使得用户定义的对象行为更加灵活。

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

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

相关文章

python基础篇--学习记录2

1.深浅拷贝 l1 ["张大仙","徐凤年",["李淳刚","邓太阿"]] # 变量名对应的就是内存地址,这里就是将l1的内存地址给了l2 # 现在两个变量指向同一个内存地址,l1变化l2也会变化 l2 l1 现在的需求是l2是l1的拷贝版本,但是两者是完全分割…

Java使用xlsx-streamer和EasyExcel解决读取超大excel文件数据处理方法

前言 最近有个项目在生产环境做数据导入时,发现开始执行导入任务会出现cpu狂飙的情况。几番定位查找发现是在读取excel的时候导致此问题的发生,因此在通常使用的为POI的普通读取,在遇到大数据量excel,50MB大小或数五十万行的级别的…

基于 HBase Phoenix 构建实时数仓(2)—— HBase 完全分布式安装

目录 一、开启 HDFS 机柜感知 1. 增加 core-site.xml 配置项 2. 创建机柜感知脚本 3. 创建机柜配置信息文件 4. 分发相关文件到其它节点 5. 重启 HDFS 使机柜感知生效 二、主机规划 三、安装配置 HBase 完全分布式集群 1. 在所有节点上配置环境变量 2. 解压、配置环境…

990-52产品经理:Important Decision-Making Skills That Employers Value 雇主看重的重要决策技能

Important Decision-Making Skills That Employers Value 雇主看重的重要决策技能 Different employers look for different things, of course, but decision-making skills are sought by virtually all companies. That’s because all employees are faced with decisions…

微信小程序onLoad加载定义好的函数

这里小程序开发中容易犯的错误-1写自定义目录标题 给客户做一个程序。需要在页面加载的时候在onLoad(options){}中加载定义好的函数,代码如下 onLoad(options) {get_week_()},运行时老报错 后来修改为正确的代码 onLoad(options) {this.get_week_()//必须加this},再…

YOLOv8优化策略:SPPF涨点篇 |引入YOLOv9的SPPELAN

🚀🚀🚀本文改进:SPP创新结合ELAN,来自于YOLOv9,助力YOLOv8,将SPPELAN代替原始的SPPF 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.YOLOv9介绍 论文: 2402.13616.pdf (arxiv.org) 摘要: 如今…

Linux的top命令解析

Top命令是什么 TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系…

理解卷积神经网络(CNN)

1. 引言:什么是CNN 卷积神经网络(CNN)是一种专为处理具有类似网格结构的数据(如图像)而设计的深度学习架构。自从在图像处理和计算机视觉领域取得突破性成就以来,CNN已成为这些领域的核心技术之一。 CNN的…

RT-DETR优化改进:下采样涨点篇 |引入YOLOv9的下采样ADown

🚀🚀🚀本文改进:YOLOv9的下采样ADown助力RT-DETR,将ADown添加在backbone和head处,提供多个yaml改进方法 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 🚀🚀🚀学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 🚀🚀🚀RT-DETR模型…

LeetCode Python - 41. 缺失的第一个正数

目录 题目答案运行结果 题目 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释&#xff1a…

Java List集合取交集的八种不同实现方式

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在Java中,取两个List集合的交集可以通过多种方式实现,包括使用Java 8的Stream API、传统的for循环遍历、使…

KH-MCX-KWE-W

KH-MCX-KWE-W品牌: kinghelm(金航标)封装: 插件 描述: 镀金

试题 算法训练 强力党逗志芃

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能。现在我们可以了解到,每个技能…

Acwing 1113. 红与黑 BFS与DFS

题目描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入格…

第七十九天 WAF攻防-漏洞发现协议代理池GobyAWVSXray

第79天 WAF攻防-漏洞发现&协议&代理池&Goby&AWVS&Xray 知识点: 1、Http/s&Sock5协议 2、Awvs Xray&Goby代理 3、Pxoxifier进程代理使用 4、Safedog&BT&Aliyun防护 演示案例: Awws漏扫-Sadedog-白名单-内置 Awws漏…

webpack5:基本概念整理

写在前头:这篇文章只是我个人在学习过程中对webpack文档的简单总结,更多详细信息请在官网阅读。 一、webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口…

leetcode热题100训练计划

路径总和 题目 思路 没思路,试试递归。 先分类讨论 算上本身结点,在递归里搜左右子树不算本身结点,在左子树或右子树里递归搜 终止条件 当前结点为空或者是当前已经是目标数 代码 class Solution {public int pathSum(TreeNode root, in…

鸡肋的Git

1.前言 对于大多数开发人员来说,我们大多数在学习或者工作过程中只关注核心部分,比如说学习Java,可能对于大多数人而言一开始都是从Java基础学起,然后408,Spring,中间件等,当你发现很多高深的技…

开源的Java报表库JasperReports介绍

JasperReports 是一个流行的开源 Java 报表库,它允许开发人员创建丰富的、基于 Java 的报表,这些报表可以与多种数据源交互,并且可以很容易地集成到 Java 应用程序中。JasperReports 提供了丰富的功能,包括数据可视化、图表、子报…

Node.js与Webpack笔记(二)

上一篇:Node.js与Webpack笔记(一)-CSDN博客 Webpack模块打包工具 1.Webpack简介以及体验 webpack是一个静态模块打包工具,从入口构建依赖图,打包有关的模块,最后用于展示你的内容 静态模块:编写…