第一章、__abs__()
一、概述
absolute value的简写
__abs__
是 Python 中的一个特殊方法(也被称为魔术方法),用于计算对象的绝对值。当你对一个对象使用内置函数 abs()
时,Python 会尝试调用该对象的 __abs__
方法来计算其绝对值。
这个方法可以被数值类型(比如整数、浮点数、复数等)和自定义类重载。当你在自定义类中实现 __abs__
方法时,你可以定义该类对象的绝对值计算规则。
二、用法
例如,对于一个自定义的类 MyNumber
,你可以实现 __abs__
方法来计算其对象的绝对值:
my_int: int = -10
print(abs(my_int)) # 10
# 等同于
print(my_int.__abs__()) # 10
my_float: float = -3.14
print(abs(my_float)) # 3.14
# 等同于
print(my_float.__abs__()) # 3.14
my_complex: complex = 3 + 4j
print(abs(my_complex)) # 输出:5.0,调用了complex_num对象的__abs__方法,返回复数的模5.0。
# 等同于
print(my_complex.__abs__()) # 5.0
my_true: bool = True
print(abs(my_true)) # 1
my_false: bool = False
print(abs(my_false)) # 0
class MyAbs(int):
def __abs__(self):
return 666
class MyNumber:
def __init__(self, value):
self.value = value
def __abs__(self):
return abs(self.value)
if __name__ == '__main__':
my_abs: MyAbs = MyAbs()
print(abs(my_abs)) # 666
num: MyNumber = MyNumber(-5)
print(abs(num)) # 这里会调用 num 对象的 __abs__ 方法来计算其绝对值,输出:5
在这个例子中,MyNumber
类实现了 __abs__
方法,它返回了对象属性 value
的绝对值。当 abs()
函数被应用到 MyNumber
类的实例时,Python 会自动调用对象的 __abs__
方法来执行绝对值的计算。
这个方法的灵活性使得你可以根据你的自定义类的特定需求来定义对象的绝对值计算方式,使得自定义类的对象可以与内置类型的操作类似。
第二章、__add__(arg)
一、概述
add 加法
__add__
是 Python 中用于重载加法运算符 +
的特殊方法,它允许自定义类定义加法操作的行为。当你对两个对象使用 +
运算符时,Python 会尝试调用对象的 __add__
方法来执行加法操作。
当你在自定义类中实现 __add__
方法时,你可以定义这个类对象之间的加法行为。
二、用法
下面是一个简单的示例,演示了如何在自定义类中使用 __add__
方法:
my_int1: int = 1
my_int2: int = 2
print(my_int1.__add__(my_int2)) # 3
# 等同于
print(my_int1 + my_int2) # 3
my_float1: float = 1.2
my_float2: float = 3.4
print(my_float1.__add__(my_float2)) #4.6
# 等同于
print(my_float1 + my_float2) # 4.6
my_complex1: complex = 1 + 2j
my_complex2: complex = 3 + 4j
print(my_complex1.__add__(my_complex2)) # (4+6j)
#等同于
print(my_complex1 + my_complex2) # (4+6j)
my_bool1: bool = True
my_bool2: bool = True
print(my_bool1.__add__(my_bool2)) # 2
# 等同于
print(my_bool1 + my_bool2) # 2
class Point:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
# 重载加法运算符
def __add__(self, other: "Point") -> "Point":
new_x = self.x + other.x
new_y = self.y + other.y
return Point(new_x, new_y)
# 创建两个 Point 对象
point1 = Point(1, 2)
point2 = Point(3, 4)
# 使用加法运算符对两个 Point 对象执行加法操作
result = point1 + point2
print(result.x, result.y) # 输出:4 6