也不明白这些特殊方法有啥用
与对象的创建、销毁有关
方法名 | 含义 |
---|
__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__ | 反射加法、反射减法,一般与普通加法和减法具有相同的功能,但操作数的位置或顺序相反,很多其他运算符也有与之对应的反射运算符 |
主要用于重载,如numpy中的__add__():在ndarray类下的,用于矩阵相加
def __add__(self, *args, **kwargs):
""" Return self+value. """
pass
自己写的一个重载
class Demo:
def __init__(self, t1):
self.t1 = t1
def __add__(self, other):
print('this is add function')
return self.t1 + other
d = Demo(1)
print(d + 10)
与内置函数有关
方法名 | 含义 |
---|
__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),描述符对象一般作为其他类的属性来使用,这三个方法分别在获取属性、修改属性值或删除属性时被调用 |