当你对可迭代对象使用 [] 操作符获取索引上的值时,Python 以 itr.__getitem__(index) 处理它,其中itr是可迭代对象,index是你想获取的索引。 因此,当你在自己的类中定义这些特殊方法时会重写与它们关联的函数或运算符的行为,因为实际 Python 是执行调用你的方法。让我们深入了解一下: 正如你所看到的,当你使用...
所谓“运算符重载(Operator Overloading)”,是面向对象编程的一种技术,允许开发者定义或者改变运算符在自定义对象上的行为。通过运算符重载,可以使得自定义类的实例与内置数据类型一样使用运算符,从而使得代码更加直观、易读。Python中虽然不提供C++中类似的运算符重载的功能实现,但是通过魔术方法,使得自定义类型支...
反向运算符: 使类在数学上正确 在定义__add__(),__sub__(),__mul__()等类似的特殊方法时, 当类实例是左侧操作数时,可以使用运算符,如果类实例是右侧操作数,则运算符将无法工作: 如果你的类表示像向量、坐标或复数等数学实体,则应用运算符应在两种情况下都正常工作,因为它是有效的数学运算。 此外,如果...
当你在可迭代对象上使用 [] 运算符来获取指定索引位置上的值时,Python 将它处理为 itr.getitem(index),itr 表示可迭代对象,index 表示你要索引的位置。 因此,在你定义自己的类时,你可以重写关联的函数或运算符的行为。因为,Python 在后台调用的是你定义的方法。我们看个例子来理解这种机制: >>>a='Real Python...
与运算符 + 对应的特殊方法是__add__方法。添加自定义__add__会改变运算符的行为。建议__add__返回类的新实例,而不是修改调用实例本身。在 Python 中这种行为很常见: 上面可以看到,对str对象使用运算符 + 实际上返回一个新str实例,从而保持调用实例 a 的值不被修改。要更改它, 我们需要显式地将新实例赋...
每一个 Python 类都为内置函数或运算符定义了自己的行为方式。当你将某个实例对象传入内置函数或使用运算符时,实际上等同于调用带相应参数的特定方法。 如果有一个内置函数,func(),它关联的特定方法是__func__(),Python 解释器会将其解释为类似于 obj.__func__()的函数调用,obj 就是实例对象。如果是运算符...