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

来源:互联网 发布:校园网网络拓扑图设计 编辑:程序博客网 时间:2024/05/21 09:15

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()对应,要求该方法必须返回TrueFalse

__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__()


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

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

>>> classT:
    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


更多Python技术文章请关注微信公众号“Python小屋”进行阅读。

0 0