前言
本文为《流畅的python》的1.2节的学习笔记。
如何使用特殊方法
代码展示
from math import hypot
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
def __abs__(self):
return hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
v1 = Vector(2, 4)
v2 = Vector(2, 1)
print(v1 + v2)
说明:
定义一个vector类,实现了结果打印,取绝对值,加法,乘法。
repr__函数:把一个对象用字符串的形式表达出来以便辨认,在__repr 的实现中,用到了%r 来获取对象各个属性的标准字符串表示形式。
函数运行过程:
class类初始化
py代码开始运行后,首先执行class类的初始化,
按照代码的顺序,第一个执行__init__()函数: 可以看到,运行到此时,已依次增加了其他几个类函数:
变量的初始化
在变量v1和v2运行时,v1和v2分别运行__init__()函数获得初值,v1 = Vector(2, 4),v2 = Vector(2, 1)
"+"和__repr__函数运行
在执行代码print(v1 + v2)时,首先运行变量v1和v2的__add__()加法函数,可以看到此时v1对应self变量,v2对应other变量: 加法函数运行后,运行__repr__()函数对应print函数进行输出:
总结
特殊函数如何实现及特殊函数的运行过程。上面已详细说明,不再赘述。