前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python对象特殊方法及其用法演示

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

作者头像
Python小屋屋主
发布2018-04-16 17:23:51
9250
发布2018-04-16 17:23:51
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档