列举面向对象中带双下划线的特殊方法,如:__new__、__init__?
在Python的面向对象编程中,以双下划线开头和结尾的特殊方法被称为魔法方法(Magic Methods)或双下方法(Dunder Methods)。它们是Python的内建方法,可以改变Python对象的一些默认行为,或者让我们的对象具有和内建类型相同的行为。
以下是一些常见的带双下划线的特殊方法:
- 初始化方法:
__new__(cls, ...)
:静态方法,用于创建并返回类的新实例。在__init__
之前调用。__init__(self, ...)
:实例初始化方法,用于设置新创建对象的初始状态。
- 表示方法:
__str__(self)
:返回对象的字符串表示,可读性高。__repr__(self)
:返回对象的官方字符串表示,通常可以通过该表示重新创建对象。
- 比较方法:
__eq__(self, other)
:等于运算符==
。__ne__(self, other)
:不等于运算符!=
。__lt__(self, other)
:小于运算符<
。__le__(self, other)
:小于等于运算符<=
。__gt__(self, other)
:大于运算符>
。__ge__(self, other)
:大于等于运算符>=
。
- 算术运算符方法:
__add__(self, other)
:加法运算符+
。__sub__(self, other)
:减法运算符-
。__mul__(self, other)
:乘法运算符*
。__truediv__(self, other)
:除法运算符/
(Python 3中)。__floordiv__(self, other)
:整除运算符//
。__mod__(self, other)
:取模运算符%
。__pow__(self, other)
:幂运算符**
。
- 赋值运算符方法:
__iadd__(self, other)
:加法赋值运算符+=
。__isub__(self, other)
:减法赋值运算符-=
。__imul__(self, other)
:乘法赋值运算符*=
。__itruediv__(self, other)
:除法赋值运算符/=
(Python 3中)。__ifloordiv__(self, other)
:整除赋值运算符//=
。__imod__(self, other)
:取模赋值运算符%=
。__ipow__(self, other)
:幂赋值运算符**=
。
- 类型转换方法:
__int__(self)
:转换为整数。__float__(self)
:转换为浮点数。__bool__(self)
:转换为布尔值(Python 3中,Python 2中是__nonzero__
)。
- 属性访问方法:
__getattr__(self, name)
:访问不存在的属性时调用。__setattr__(self, name, value)
:设定属性值时调用。__delattr__(self, name)
:删除属性时调用。
- 容器方法:
__len__(self)
:获取容器长度。__getitem__(self, key)
:获取容器中指定元素。__setitem__(self, key, value)
:设定容器中指定元素的值。__delitem__(self, key)
:删除容器中指定元素。__contains__(self, item)
:检查容器中是否包含指定元素(in
运算符)。
- 调用方法:
__call__(self, ...)
:允许对象像函数一样被调用。
- 属性描述符方法:
__get__(self, instance, owner)
:获取属性值。__set__(self, instance, value)
:设定属性值。__delete__(self, instance)
:删除属性。
- 类型判断和转换:
__instancecheck__(self, instance)
:检查一个对象是否是这个类的实例(通常由isinstance()
调用)。__subclasscheck__(self, subclass)
:检查一个类是否是这个类的子类(通常由issubclass()
调用)。
- 销毁方法(不常用且不建议依赖):
__del__(self)
:对象销毁时调用。
以上只是双下划线方法的部分列表,实际上Python中还有更多的双下划线方法用于不同的目的。需要注意的是,虽然这些方法提供了很大的灵活性,但不建议滥用,因为过度使用魔法方法可能会使代码变得难以理解和维护。