def __init__ python特殊方法(也称为魔法方法或双下划线方法)

2024-06-23 22:44

本文主要是介绍def __init__ python特殊方法(也称为魔法方法或双下划线方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这些特殊方法(也称为魔法方法或双下划线方法)是由 Python 的数据模型(data model)规定的,用于定义对象的行为。它们通常用于实现内置操作和函数的行为,如算术运算、比较操作、容器类型(如列表和字典)的行为等。

特殊方法的命名规定

这些方法的名字都是由 Python 语言规范规定的,以下是一些常见的特殊方法及其用途:

  1. 对象表示

    • __str__(self):定义当使用 str()print() 函数输出对象时的字符串表示。
    • __repr__(self):定义对象的官方字符串表示(通常可以用来重新创建该对象),当使用 repr() 函数或在交互式解释器中输入对象名称时调用。
  2. 算术运算

    • __add__(self, other):定义加法运算 (+) 的行为。
    • __sub__(self, other):定义减法运算 (-) 的行为。
    • __mul__(self, other):定义乘法运算 (*) 的行为。
    • __truediv__(self, other):定义真除法运算 (/) 的行为。
    • __floordiv__(self, other):定义地板除法运算 (//) 的行为。
    • __mod__(self, other):定义取模运算 (%) 的行为。
    • __pow__(self, other):定义幂运算 (**) 的行为。
  3. 比较运算

    • __lt__(self, other):定义小于运算 (<) 的行为。
    • __le__(self, other):定义小于等于运算 (<=) 的行为。
    • __eq__(self, other):定义等于运算 (==) 的行为。
    • __ne__(self, other):定义不等于运算 (!=) 的行为。
    • __gt__(self, other):定义大于运算 (>) 的行为。
    • __ge__(self, other):定义大于等于运算 (>=) 的行为。
  4. 容器类型

    • __len__(self):定义当使用 len() 函数时的行为。
    • __getitem__(self, key):定义当使用索引访问对象(如 obj[key])时的行为。
    • __setitem__(self, key, value):定义当使用索引设置对象值(如 obj[key] = value)时的行为。
    • __delitem__(self, key):定义当使用索引删除对象值(如 del obj[key])时的行为。
    • __iter__(self):定义当使用迭代(如 for item in obj)时的行为。
    • __next__(self):定义迭代器的行为,返回迭代中的下一个值。
  5. 对象构造和销毁

    • __init__(self, ...):定义对象的初始化方法,在创建对象时调用。
    • __del__(self):定义对象的析构方法,在对象被垃圾回收时调用。
  6. 上下文管理

    • __enter__(self):定义当进入上下文管理器时的行为(如 with 语句)。
    • __exit__(self, exc_type, exc_value, traceback):定义当退出上下文管理器时的行为(如 with 语句结束)。

示例代码

以下是一个包含多种特殊方法的示例类:

class MyContainer:def __init__(self, data):self.data = datadef __len__(self):return len(self.data)def __getitem__(self, key):return self.data[key]def __setitem__(self, key, value):self.data[key] = valuedef __delitem__(self, key):del self.data[key]def __iter__(self):return iter(self.data)def __str__(self):return str(self.data)def __repr__(self):return f"MyContainer({repr(self.data)})"# 创建实例
container = MyContainer([1, 2, 3, 4, 5])# 使用 len() 函数
print(len(container))  # 输出:5# 使用索引访问
print(container[1])  # 输出:2# 使用索引设置
container[1] = 20
print(container[1])  # 输出:20# 使用索引删除
del container[1]
print(container.data)  # 输出:[1, 3, 4, 5]# 使用迭代
for item in container:print(item)# 打印对象
print(container)  # 输出:[1, 3, 4, 5]
print(repr(container))  # 输出:MyContainer([1, 3, 4, 5])

在这个示例中,MyContainer 类实现了多种特殊方法,使其能够与 Python 的内置函数和操作很好地集成。这展示了如何使用这些方法来增强自定义类的功能和行为。

这篇关于def __init__ python特殊方法(也称为魔法方法或双下划线方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088492

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain