Python 魔术方法
在Python中,魔术方法(Magic Methods)或称为双下划线方法(Dunder Methods),是一类具有特殊用途的方法,其名称前后都带有两个下划线(如 __init__、__str__ 等)。这些方法定义了对象的内置行为,使得类的实例能够表现得像内置类型一样。以下是Python中一些常用的魔术方法及其使用示例:
1. __init__(self, ...)
用于对象的初始化。在创建对象时调用。
python复制代码
class Person: | |
def __init__(self, name, age): | |
self.name = name | |
self.age = age | |
p = Person("Alice", 30) | |
print(p.name, p.age) # 输出: Alice 30 |
2. __str__(self)
定义对象的字符串表示。当使用 print() 或 str() 函数时调用。
python复制代码
class Person: | |
def __init__(self, name, age): | |
self.name = name | |
self.age = age | |
def __str__(self): | |
return f"Person(name={self.name}, age={self.age})" | |
p = Person("Alice", 30) | |
print(p) # 输出: Person(name=Alice, age=30) |
3. __repr__(self)
定义对象的“官方”字符串表示,通常用于调试。repr() 函数会调用这个方法。
python复制代码
class Person: | |
def __init__(self, name, age): | |
self.name = name | |
self.age = age | |
def __repr__(self): | |
return f"Person(name={self.name!r}, age={self.age!r})" | |
p = Person("Alice", 30) | |
print(repr(p)) # 输出: Person(name='Alice', age=30) |
4. __add__(self, other)
定义加法运算符(+)的行为。
python复制代码
class Vector: | |
def __init__(self, x, y): | |
self.x = x | |
self.y = y | |
def __add__(self, other): | |
return Vector(self.x + other.x, self.y + other.y) | |
v1 = Vector(1, 2) | |
v2 = Vector(3, 4) | |
v3 = v1 + v2 | |
print(v3.x, v3.y) # 输出: 4 6 |
5. __getitem__(self, key)
定义获取元素的行为,用于索引操作(如 obj[key])。
python复制代码
class MyList: | |
def __init__(self, elements): | |
self.elements = elements | |
def __getitem__(self, key): | |
return self.elements[key] | |
ml = MyList([1, 2, 3, 4, 5]) | |
print(ml[1]) # 输出: 2 |
6. __setitem__(self, key, value)
定义设置元素的行为,用于索引赋值操作(如 obj[key] = value)。
python复制代码
class MyList: | |
def __init__(self, elements): | |
self.elements = elements | |
def __getitem__(self, key): | |
return self.elements[key] | |
def __setitem__(self, key, value): | |
self.elements[key] = value | |
ml = MyList([1, 2, 3, 4, 5]) | |
ml[1] = 10 | |
print(ml[1]) # 输出: 10 |
7. __len__(self)
定义获取对象长度(如列表长度)的行为,用于 len() 函数。
python复制代码
class MyList: | |
def __init__(self, elements): | |
self.elements = elements | |
def __len__(self): | |
return len(self.elements) | |
ml = MyList([1, 2, 3, 4, 5]) | |
print(len(ml)) # 输出: 5 |
8. __call__(self, *args, **kwargs)
定义对象像函数一样被调用的行为(如 obj())。
python复制代码
class Adder: | |
def __init__(self, n): | |
self.n = n | |
def __call__(self, x): | |
return x + self.n | |
add_five = Adder(5) | |
print(add_five(3)) # 输出: 8 |
9. __enter__(self) 和 __exit__(self, exc_type, exc_val, exc_tb)
用于定义对象的上下文管理行为,通常与 with 语句一起使用。
python复制代码
class MyContext: | |
def __enter__(self): | |
print("Entering the context") | |
return self | |
def __exit__(self, exc_type, exc_val, exc_tb): | |
print("Exiting the context") | |
return False # 如果返回 True,则异常会被忽略 | |
with MyContext() as ctx: | |
print("Inside the context") | |
# 输出: | |
# Entering the context | |
# Inside the context | |
# Exiting the context |
这些魔术方法是Python面向对象编程中非常强大的一部分,通过它们可以使自定义的类表现得更加自然和符合直觉。
相关文章:
Python 魔术方法
在Python中,魔术方法(Magic Methods)或称为双下划线方法(Dunder Methods),是一类具有特殊用途的方法,其名称前后都带有两个下划线(如 __init__、__str__ 等)。这些方法定…...
03 go语言(golang) - fmt包基本类型
fmt包 在Go语言中,fmt 包是一个非常重要且广泛使用的标准库包,它提供了格式化I/O(输入/输出)功能,类似于C语言中的 printf 和 scanf。通过这个包,你可以读取输入并将数据格式化输出到标准输出或其他写入器…...
Docker本地镜像发布到阿里云镜像服务的简易指南
1 阿里云容器镜像服务 阿里云容器镜像服务(Alibaba Cloud Container Registry,简称ACR)是一个为容器镜像、Helm Chart等云原生资产提供安全托管及高效分发的平台。它支持多架构容器镜像,包括Linux、Windows、ARM等,以…...
大数据学习---快速了解clickhouse数据库
ClickHouse数据库介绍 ClickHouse是一款由Yandex开发的列式数据库管理系统(DBMS),适用于在线分析处理(OLAP)场景。它具有高性能、可扩展性、实时更新等特点,适用于处理大规模数据。 特点 列式存储&#x…...
哪些方法可以缓解面试紧张?
面试紧张是许多人在面对重要职业机会时的一种常见情绪。虽然一定程度的紧张可能激发人的潜能,但过度的紧张则可能影响到面试表现。为了缓解面试紧张,以下是一些有效的方法: 1.充分准备: 深入了解公司背景、职位要求以及公司文化…...
即时通讯未读消息计数
单聊未读消息计数 未读消息的计数,分为两个部分:增加和减少 其中,未读消息计数的增加,是由数据库(redis)在写入消息的同时,增加对应接收方的未读消息计数 在线 用户在线时,客户端…...
在Openshift(K8S)上通过EMQX Operator部署Emqx集群
EMQX Operator 简介 EMQX Broker/Enterprise 是一个云原生的 MQTT 消息中间件。 我们提供了 EMQX Kubernetes Operator 来帮助您在 Kubernetes 的环境上快速创建和管理 EMQX Broker/Enterprise 集群。 它可以大大简化部署和管理 EMQX 集群的流程,对于管理和配置的知…...
Python酷玩之旅_数据分析入门(matplotlib)
导览 前言matplotlib入门1. 简介1.1 Pairwise data1.2 Statistical distributions1.3 Gridded data1.4 Irregularly gridded data1.5 3D and volumetric data 2. 实践2.1 安装2.2 示例 结语系列回顾 前言 翻看日历,今年的日子已划到了2024年10月19日,今天…...
uiautomatorviewer安卓9以上正常使用及问题处理
一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…...
Go语言gRPC快速入门
文章目录 前言gRPC是什么Go语言的gRPC技术栈准备工作接口定义代码生成服务端代码编写客户端代码编写效果演示完整代码链接最后 前言 你好,我是醉墨居士,这篇博客想帮助初学者能够快速入门gRPC,希望能够为你节省宝贵的时间,让时间…...
Golang | Leetcode Golang题解之第479题最大回文数乘积
题目: 题解: func largestPalindrome(n int) int {if n 1 {return 9}upper : int(math.Pow10(n)) - 1for left : upper; ; left-- { // 枚举回文数的左半部分p : leftfor x : left; x > 0; x / 10 {p p*10 x%10 // 翻转左半部分到其自身末尾&…...
UDP协议讲解
预备知识: 端口号port: 我们在正常网络通信时,实际上是进程在互相通信。 我们所有的网络通信的行为,本质上都是进程间通信。 对双方而言,1.先保证数据能到达自己的机器 ip解决 2.找到指定的进程 端口号 ip地址用来…...
交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention轴承故障识别模型
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…...
CSDN Markdown 编辑器语法大全
Markdown 是一种轻量级标记语言,它以简洁、易读易写的特点,被广泛应用于技术文档、博客文章、笔记等领域。CSDN 的 Markdown 编辑器为用户提供了丰富的功能,让用户能够轻松地创建格式规范、内容丰富的文档。以下是一份详细的 CSDN Markdown 编…...
TCP/IP 协议【四次挥手】简要说明
四次挥手是为了确保数据的完整性和可靠性,解决的主要问题是双方在断开连接时,可能还有未完成传输的数据或者未被接收的数据。 具体来说,四次挥手解决的问题是: 第一次挥手(发送方向接收方发送FIN包)&#…...
第11篇:网络安全协议
目录 引言 11.1 安全套接字层(SSL)和传输层安全(TLS)协议 11.1.1 SSL/TLS 的工作原理 11.1.2 SSL/TLS 的应用场景 11.2 虚拟专用网(VPN)和 IP 安全协议(IPSec) 11.2.1 VPN 的工…...
ES-入门-javaApi-文档-新增-删除
新增指定索引的文档数据的代码如下: package com.atgulgu.es.test;import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexRe…...
【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b
【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b CogVideoX-2b 模型介绍发布时间模型测试生成的demo视频生成视频限制 运行环境安装运行模型下载开源协议参考 CogVideoX-2b 模型介绍 CogVideoX是 清影 同源的开源版本视频生成模型。 基础信息: 发布时间 2…...
【MR开发】在Pico设备上接入MRTK3(三)——在Unity中运行MRTK示例
在前面的文档中,介绍了如何在Unity工程中配置号MRTK和Pico SDK 【MR开发】在Pico设备上接入MRTK3(一)在Unity中导入MRTK3依赖【MR开发】在Pico设备上接入MRTK3(二)在Unity中配置Pico SDK 本文将介绍如何运行一个简单…...
C#中委托的应用与示例
委托 委托是指把事情托付给别人或别的机构办理。在C#语言中委托是一种特殊类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。委托是具有特定参数列表和返回类型的方法的引用的类型(不是引用对象,而是引用方法)。 可以委托将看作一个包含有序方法列表…...
使用openclaw龙虾采集电商数据
最近openclaw养龙虾的热潮带动了skill的爆发,github上各种skill层出不穷,可以解决繁杂的办公自动化任务,比如生成ppt、运营媒体账号、审查代码等,skill已经成为ai时代的“万能软件”。 刚好有个朋友是做跨境3D打印业务࿰…...
新手避坑指南:用Pandas高效合并CIC-IDS-2018的10个CSV文件(附内存优化技巧)
新手避坑指南:用Pandas高效合并CIC-IDS-2018的10个CSV文件(附内存优化技巧) 网络安全数据分析的第一步往往是从处理原始数据集开始。CIC-IDS-2018作为业内广泛使用的基准数据集,其分散在10个CSV文件中的特征数据给初学者带来了不小…...
LeetCode Hot Code——合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例 1:输入:intervals [[1,3],[…...
seo优化代理如何增加网站的流量和转化率
了解SEO优化代理的基本概念 在数字营销的现代环境中,SEO优化代理(Search Engine Optimization代理)扮演着至关重要的角色。SEO优化代理是一种专门提供网站搜索引擎优化服务的公司或团队,致力于提升网站在搜索引擎结果中的排名&am…...
Jupyter Notebook安全配置全攻略:如何在Linux上设置密码保护与远程访问
Jupyter Notebook安全配置全攻略:如何在Linux上设置密码保护与远程访问 在数据科学和机器学习领域,Jupyter Notebook已经成为不可或缺的工具,它提供了交互式编程环境,让开发者能够轻松地进行数据探索、可视化和模型训练。然而&…...
基于粒子群算法的IEEE33节点配电网无功优化及其结果分析
基于粒子群算法的配电网无功优化 基于IEEE33节点配电网,以无功补偿器的接入位置和容量作为优化变量,以牛拉法进行潮流计算,以配电网网损最小为优化目标,通过优化求解,得到最佳接入位置和容量,优化结果如下所…...
python jira
# 聊聊 Python JIRA 这个库 平时做项目管理和开发流程对接的时候,经常需要和 JIRA 这类工具打交道。如果每次都手动在网页上点来点去,效率实在太低。这时候 Python JIRA 库就派上用场了。 它到底是什么 简单来说,Python JIRA 是一个用来和 JI…...
CefFlashBrowser:Flash内容现代化解决方案与完整应用指南
CefFlashBrowser:Flash内容现代化解决方案与完整应用指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 当您珍藏的Flash教育课件无法打开,经典的Flash游戏无法运…...
客户决策链地图怎么画:老板、采购、技术、项目、法务分别怎么看你
在很多B2B企业的表达体系里,“客户”这个词经常被用得过于整齐。 官网会写“服务行业客户”,销售会说“面向大型企业”,PPT会写“解决复杂需求”。这些话都没问题,但它们通常默认一个前提:客户像一个人一样在决策。而真…...
【C++第二十六章】特殊类设计
前言 🚀“特殊类设计”这一章看起来内容不多,但背后其实在讨论一个很典型、也很有代表性的 C 设计问题:类到底能不能限制对象的创建位置,能不能强制某个对象只能在堆上创建,或者只能在栈上创建。 这不是语法技巧题&…...
