Python魔术方法

第一章、__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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值