1. 介绍
Python特殊函数是Python内置函数的一种。这里的特殊函数不是指像def和class这样的关键字,而是指在Python中命名特殊的函数,这些函数用于实现Python中特定的语义。
这些函数通常与Python中的特殊方法有相似之处,也就是说,这些函数都有一个双下划线(__)的前缀和后缀,比如__init__,__len__等等。
它们的实现是为了解决特定的问题,比如支持迭代,支持比较操作,支持运算符重载等等。
2. 特殊函数类别
2.1 创建对象相关
创建对象时,一般要用到特殊方法__init__。
class Person:
def __init__(self, name):
self.name = name
person = Person('Tom')
上面的代码中,创建Person对象时调用了__init__方法。这个方法会在对象创建完成后自动调用,然后执行初始化的工作。
2.2 可调用对象相关
Python中一切皆对象,函数也不例外。我们可以通过__call__方法使一个普通的类实例变成一个可调用对象。
class Adder:
def __init__(self, n):
self.n = n
def __call__(self, m):
return self.n + m
adder = Adder(2)
result = adder(3)
print(result) #输出5
上面的代码中,Adder类实现了__call__方法,相当于给类对象增加了一个调用接口,使这个类的实例可以像函数一样被调用。
2.3 比较运算符相关
Python中的比较运算符包括==、!=、>、>=、<、<=,如果要支持自定义的类型进行这些运算,则需要通过特殊方法进行操作。
__eq__方法用于实现等于运算符(==),__ne__方法用于实现不等于运算符(!=),__lt__方法用于实现小于运算符(<),__le__方法用于实现小于等于运算符(<=),__gt__方法用于实现大于运算符(>),__ge__方法用于实现大于等于运算符(>=)。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
p1 = Point(1,2)
p2 = Point(1,2)
if p1 == p2:
print('p1 equal p2')
else:
print('p1 not equal p2')
上面的代码中,我们实现了Point类的__eq__方法,用于判断两个Point对象是否相等,我们通过比较两个对象的x和y属性完成比较运算。
2.4 数学运算符相关
Python中的数学运算符包括+、-、*、/、%、//、**,如果要支持自定义类型进行这些运算,则需要通过特殊方法进行操作。
__add__方法用于实现加法运算(+),__sub__方法用于实现减法运算(-),__mul__方法用于实现乘法运算(*),__truediv__方法用于实现真除法运算(/),__mod__方法用于实现取模运算(%),__floordiv__方法用于实现整数除法运算(//),__pow__方法用于实现幂运算(**)。
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x+other.x, self.y+other.y)
v1 = Vector(1,2)
v2 = Vector(3,4)
v3 = v1 + v2
print(v3.x, v3.y) #输出4,6
上面的代码中,我们实现了Vector类的__add__方法,用于实现向量之间的加法运算。我们通过计算两个向量的每个分量,得到了相应的结果。
2.5 其他特殊函数
除了上面提到的特殊函数外,Python还有许多其他特殊函数。
__str__方法用于返回对象的字符串表示,__repr__方法用于返回对象的可靠字符串表示,__len__方法用于返回对象的长度,__iter__方法用于返回迭代器对象,__next__方法用于返回迭代器的下一个值,__getitem__方法用于获取对象的元素,__setitem__方法用于设置对象的元素,__delitem__方法用于删除对象的元素等等。
3. 总结
Python特殊函数是Python语言的重要特性之一,它们可以帮助我们通过类的方式来实现许多语言原本不支持的功能,比如运算符重载、比较运算、迭代等等。掌握这些函数对于编写Python程序非常重要,同时也有助于理解语言的设计思想。