Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python对象特殊方法及其用法演示

Python对象特殊方法及其用法演示

作者头像
Python小屋屋主
发布于 2018-04-16 09:23:51
发布于 2018-04-16 09:23:51
9870
举报
文章被收录于专栏:Python小屋Python小屋

Python类有大量特殊方法,实现不同的特殊方法后该类对象则会支持对应的运算符或内置函数,下面的对应关系表列出了大部分特殊方法:

方法

功能说明

__new__()

类的静态方法,用于确定是否要创建对象

__init__()

构造方法,创建对象时自动调用

__del__()

析构方法,释放对象时自动调用

__add__()

+

__sub__()

-

__mul__()

*

__truediv__()

/

__floordiv__()

//

__mod__()

%

__pow__()

**

__eq__()、 __ne__()、__lt__()、 __le__()、__gt__()、 __ge__()

==、 !=、<、 <=、>、 >=

__lshift__()、__rshift__()

<<、>>

__and__()、__or__()、__invert__()、__xor__()

&、|、~、^

__iadd__()、__isub__()

+=、-=,很多其他运算符也有与之对应的复合赋值运算符

__pos__()

一元运算符+,正号

__neg__()

一元运算符-,负号

__contains__ ()

与成员测试运算符in对应

__radd__()、__rsub__

反射加法、反射减法,一般与普通加法和减法具有相同的功能,但操作数的位置或顺序相反,很多其他运算符也有与之对应的反射运算符

__abs__()

与内置函数abs()对应

__bool__()

与内置函数bool()对应,要求该方法必须返回True或False

__bytes__()

与内置函数bytes()对应

__complex__()

与内置函数complex()对应,要求该方法必须返回复数

__dir__()

与内置函数dir()对应

__divmod__()

与内置函数divmod()对应

__float__()

与内置函数float()对应,要求该该方法必须返回实数

__hash__()

与内置函数hash()对应

__int__()

与内置函数int()对应,要求该方法必须返回整数

__len__()

与内置函数len()对应

__next__()

与内置函数next()对应

__reduce__()

提供对reduce()函数的支持

__reversed__()

与内置函数reversed()对应

__round__()

对内置函数round()对应

__str__()

与内置函数str()对应,要求该方法必须返回str类型的数据

__repr__()

打印、转换,要求该方法必须返回str类型的数据

__getitem__()

按照索引获取值

__setitem__()

按照索引赋值

__delattr__()

删除对象的指定属性

__getattr__()

获取对象指定属性的值,对应成员访问运算符“.”

__getattribute__()

获取对象指定属性的值,如果同时定义了该方法与__getattr__(),那么__getattr__()将不会被调用,除非在__getattribute__()中显式调用__getattr__()或者抛出AttributeError异常

__setattr__()

设置对象指定属性的值

__base__

该类的基类

__class__

返回对象所属的类

__dict__

对象所包含的属性与值的字典

__subclasses__()

返回该类的所有子类

__call__()

包含该特殊方法的类的实例可以像函数一样调用

__get__()

定义了这三个特殊方法中任何一个的类称作描述符(descriptor),描述符对象一般作为其他类的属性来使用,这三个方法分别在获取属性、修改属性值或删除属性时被调用

__set__()

__delete__()

下面举几个例子演示特殊方法的用法:

# 普通类,对象不支持加法运算

>>> class T: def __init__(self, v): self.__value = v

>>> t = T(3) >>> t + 5 Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> t + 5 TypeError: unsupported operand type(s) for +: 'T' and 'int'

# 为类实现特殊方法__add__(),对象支持加法运算

# 不支持直接显示对象,也不支持使用print()进行显示 >>> class T: def __init__(self, v): self.__value = v def __add__(self, v): return T(self.__value + v)

>>> t = T(3) >>> t + 5 <__main__.T object at 0x0000028472147470>

# 为类实现特殊方法__repr__()和__str__()

# 对象支持直接显示和使用print()显示 >>> class T: def __init__(self, v): self.__value = v def __add__(self, v): return T(self.__value + v) def __repr__(self): return repr(self.__value) def __str__(self): return str(self.__value)

>>> t = T(3) >>> tt = t + 5 >>> tt 8 >>> print(tt) 8

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python进阶教程笔记(三)类的特殊方法
对于Python的内建对象,比如int、dict、list等,通过str()方法,可以把这些对象转换为字符串对象输出。
Lemon黄
2020/10/30
9650
Python入门之面向对象编程(三)Python类的魔术方法
python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法。这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分为这三个部分来讲解的 简单,功能性,一般不修改直接调用查看结果 实现简单功能,定义后使用 实现比较复杂功能,常常是一些我们常见类的特性的实现原理,具体分为 实例成为可迭代对象(列表的特性) 实例索引取值(列表的特性) 上下文管理(文件的特性)等 简单功能 这部分包括上面列出的前两个点 不需要修改直接调用的,
Jetpropelledsnake21
2018/05/02
7520
Python Magic Method 与 Setup 方法:深入解析与应用
Python 中的魔法方法,也称为双下划线方法或特殊方法,格式为 “方法名”。这些方法无需主动调用,而是在特定场景下由 Python 解释器自动调用。魔法方法的作用是自定义类的行为,以便与内置操作符(例如 +、-、*、/、== 等)和函数(例如 len()、str() 等)交互。
井九
2024/10/12
1000
Python魔术方法-Magic Method
目录[-] 介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中有相应描述,但是对于官方的描述比较混乱而且组织比较松散。很难找到有一个例子。 构造和初始化 每个Pythoner都知道一个最基本的魔术方法, __init__ 。通过此方法我们可以定义一个对象的初始操作。然而,当调用 x = SomeClass() 的时候, __init__ 并不是第一个被调用的方法。实际上,还有
jhao104
2018/03/20
8790
Python学习——数据模型/特殊方法
数据模型其实是对Python框架的描述,它规范了这门语言自身构架模块的接口,这些模块包括但不限于序列、迭代器、函数、类和上下文管理器。简单来说,数据模型就是Python自身的数据类型,及其包含的特殊方法。这些特殊方法在Java中也被成为‘魔术方法’。
陆勤_数据人网
2020/11/03
5130
Python学习——数据模型/特殊方法
Python面向对象的魔术方法
在Python中,所有以__双下划线包起来的方法,都统称为魔术方法。比如最常见的 __init__ 。
职场亮哥
2020/10/10
7760
Python中的魔法方法
python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的
deephub
2023/02/01
4390
Python3 | 练气期,面向对象、类魔术方法,类修饰器!
如果你接触过 Java、Golang 编程语言,那么你一定知道面向对象编程(OOP)的概念。面向对象编程(OOP)是相对于面向过程编程而言的,面向过程编程是一种以过程为中心的开发模式,而面向对象编程则是以对象为中心的开发模式。
全栈工程师修炼指南
2024/07/29
2180
Python3 | 练气期,面向对象、类魔术方法,类修饰器!
Python知识点笔记-面向对象进阶篇
python知识点范围:magic method魔术方法 magic method魔术方法是前后有两个下划线的属性; 创建对象的方法def __new__(cls ),重写的话可能需要一个星号和两个星号的参数; 销毁对象用__del__(),由python回收机制调用; 对象之所以可以比较是因为有运算符魔术方法属性,只要能比较的都有的; 比较运算符__cmp__(self, other)【eq, lt, gt】 数字运算符__add__(self, other)【sub, mul, div】 逻辑运算符__
小蓝枣
2020/09/25
3330
【愚公系列】2021年12月 Python教学课程 23-面向对象编程-运算符重载
运算符重载,是对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型。运算符重载,是为了让用户自定义的对象能够使用中缀运算符(如+,-,*,&等)或一元运算符(如~)等。
愚公搬代码
2021/12/16
3600
Python魔方方法详解
原文链接: https://fishc.com.cn/forum.php?mod=viewthread&tid=48793&extra=page%3D1%26filter%3Dtypeid%26typ
py3study
2020/01/10
9440
Python 3 之 运算符重载详解
实际上,“运算符重载”只是意味着在类方法中拦截内置的操作……当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果。以下是对重载的关键概念的复习:
py3study
2020/01/03
4.3K0
python学习笔记
可更改对象(mutable包含,数字、字符串、元组)和不可更改对象(immutable包含,列表、字典):引用和实体参数传递
sofu456
2019/07/09
5050
Python学习笔记整理(十五)类的编写
类代码编写细节 一、class语句 一般形式 class    <name>(superclass,...):     data=value     def mothod(self,...):         self.member=value 在class语句内,任何赋值语句都会产生类属性。 类几乎就是命名空间,也就是定义变量名(属性)的工具,把数据和逻辑导出给客户端。 怎么样从class语句得到命名空间的呢? 过程如下。就像模块文件,位于class语句主体中的语句会建立起属性。当py
py3study
2020/01/08
9450
Python运算符重载
在Python语言中提供了类似于C++的运算符重在功能: 一下为Python运算符重在调用的方法如下: Method        Overloads        Call for __init__        构造函数        X=Class() __del__        析构函数        对象销毁 __add__        +                X+Y,X+=Y __or__        |                X|Y,X|=Y __repr__        打印转换        print X,repr(X) __str__        打印转换        print X,str(X) __call__        调用函数        X() __getattr_    限制            X.undefine __setattr__    取值            X.any=value __getitem__    索引            X[key],                             For If __len__        长度            len(X) __cmp__        比较            X==Y,X<Y __lt__        小于            X<Y __eq__        等于            X=Y __radd__        Right-Side +        +X __iadd__        +=                X+=Y __iter__        迭代            For In 7.1    减法重载
py3study
2020/01/07
6410
Python基础(下)
定义了函数后,相当于有了一个具有某功能的代码块,想要调用函数,通过函数名()即可。详细示例如下:
py3study
2020/01/19
5150
面向对象-魔术方法
拦截点号运算。当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法
星哥玩云
2022/09/08
2730
python 数据模型
https://github.com/ccc013/CodesNotes/blob/master/FluentPython/1_Python%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B.ipynb
kbsc13
2020/04/22
1K0
python 数据模型
[PYTHON] 核心编程笔记(13.P
类与实例相互关联,类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息
py3study
2020/01/07
3970
定制类和黑魔法
定制类 反射     反射又称为自省,指的是程序可以访问、检测和修改它本身状态和行为的一种能力。python中提供了以下四个自检功能的函数。     hasattr(object, name):用来检测object(适用于类、文件、模块或对象,一切皆对象)中有没有一个name字符串对应的方法或属性。
py3study
2020/02/10
4930
相关推荐
Python进阶教程笔记(三)类的特殊方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档