Python魔法函数

news/2025/2/3 5:27:00/

在Python中,的确有“魔法函数”(Magic Methods)这种说法,也被称为特殊方法(Special Methods)。这些函数的名称以双下划线开始和结束,例如 __init____len__ 等。它们为Python提供了一种约定俗成的方式,使得用户定义的类能够与Python的内置操作和语法进行交互。以下是魔法函数的常见用途:

1. 对象初始化与构造

  • __init__:构造函数,在创建对象时被调用,用于初始化对象的属性。
python">class MyClass:def __init__(self, value):self.value = value

2. 模拟容器类型

  • __len__:定义当使用内置函数 len() 时对象的行为,返回对象的长度。
python">class MyList:def __init__(self):self.data = []def __len__(self):return len(self.data)
  • __getitem__:使得对象可以像序列或映射一样通过索引或键来访问元素。
python">class MyDict:def __init__(self):self.data = {}def __getitem__(self, key):return self.data[key]

3. 运算符重载

  • __add__:定义对象使用 + 运算符时的行为。
python">class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Vector(self.x + other.x, self.y + other.y)
  • __eq__:定义对象使用 == 运算符时如何判断相等。
python">class Point:def __init__(self, x, y):self.x = xself.y = ydef __eq__(self, other):return self.x == other.x and self.y == other.y

4. 迭代器相关

  • __iter__:返回一个迭代器对象,使得对象可以在 for 循环中使用。
python">class MyRange:def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):return selfdef __next__(self):if self.current >= self.end:raise StopIterationvalue = self.currentself.current += 1return value

5. 字符串表示

  • __str__:定义当使用 str() 函数或在 print() 中输出对象时的字符串表示形式。
python">class Person:def __init__(self, name):self.name = namedef __str__(self):return f"Person named {self.name}"
  • __repr__:定义对象的“官方”字符串表示形式,通常用于调试和开发。
python">class Book:def __init__(self, title, author):self.title = titleself.author = authordef __repr__(self):return f"Book('{self.title}', '{self.author}')"

魔法函数极大地增强了Python类的灵活性和表现力,使得自定义类能够像内置类型一样自然地融入Python的编程环境中。


另外可以参考:Python 魔术方法


http://www.ppmy.cn/news/1568875.html

相关文章

搜索引擎快速收录:关键词布局的艺术

本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/21.html 搜索引擎快速收录中的关键词布局,是一项既精细又富有策略性的工作。以下是对关键词布局艺术的详细阐述: 一、关键词布局的重要性 关键词布局影响着后期页面…

MATLAB R2023b下载与安装教程

MATLAB R2023b 软件下载软件介绍安装步骤参考链接 软件下载 软件名称:MATLAB 2023b软件语言:简体中文软件大小:12.16G系统要求:Windows10或更高,64位操作系统硬件要求:CPU3GHz ,RAM16G或更高下…

JVM对象分配内存如何保证线程安全?

大家好,我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全?】面试题。希望对大家有帮助; JVM对象分配内存如何保证线程安全? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中,对象的内存分配是通过堆内存进行的。…

qwen2.5-vl:阿里开源超强多模态大模型(包含使用方法、微调方法介绍)

1.简介 在 Qwen2-VL 发布后的五个月里,众多开发者基于该视觉语言模型开发了新的模型,并向 Qwen 团队提供了极具价值的反馈。在此期间,Qwen 团队始终致力于打造更具实用性的视觉语言模型。今天,Qwen 家族的最新成员——Qwen2.5-VL…

Springboot使用AOP时,需不需要引入AspectJ?

Springboot使用AOP时,需不需要引入AspectJ? 在Spring Boot中使用AOP时,是否需要引入AspectJ取决于你选择的具体AOP实现方式。以下是详细分步说明: 1. 默认场景:使用Spring AOP(基于代理) 不需要引入AspectJ依赖&am…

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译

感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…

MV结构下设置Qt表格的代理

目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见: 所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客…

Linux第二讲--用户权限

前言:我们之前的账号是root,现在我们要在创建一个个人账号,本文将围绕其进行讲解。 1.新建个人账号 在命令行输入:adduser 名字 passwd 名字 输入后会出现这个界面 设置一下密码(为了保护隐私,输入时光…