第二章:Python中的魔法函数

目录

3.1 什么是魔法函数

示例代码

3.2 Python 的数据模型以及数据模型对 Python 的影响

3.3 魔法函数一览

3.3.1 非数学运算

示例代码

3.3.2 数学运算

示例代码

3.4 随便举个例子说明魔法函数的重要性(len 函数)

示例代码

3.5 本章小节


        


在 Python 编程中,魔法函数(也称为特殊方法)是类中以双下划线开头和结尾的函数。这些函数在特定情况下会被自动调用,为对象提供了许多特殊功能。理解和使用魔法函数可以使代码更加简洁和强大。

3.1 什么是魔法函数

魔法函数是 Python 类的一部分,这些函数通过特殊的命名约定来实现特定的行为。常见的魔法函数包括 __init__(构造函数)、__str__(字符串表示)、__len__(长度)、__add__(加法运算符)等。它们通常用于定义对象的行为,如对象创建、字符串表示、算术运算等。

示例代码
class MyClass:
    def __init__(self, value):
        self.value = value
    
    def __str__(self):
        return f"MyClass with value: {self.value}"

obj = MyClass(10)
print(obj)  # 输出: MyClass with value: 10
3.2 Python 的数据模型以及数据模型对 Python 的影响

Python 的数据模型(Data Model)定义了对象和它们之间的交互方式。魔法函数是数据模型的一部分,它们允许我们定制类的行为,从而影响对象的运算、比较、属性访问等。

例如,__getitem____setitem__ 可以让对象表现得像列表或字典;__call__ 让对象可以像函数一样被调用。这些魔法函数极大地增强了 Python 的灵活性和表达力。

class CustomList:
    def __init__(self):
        self.data = []
    
    def __getitem__(self, index):
        return self.data[index]
    
    def __setitem__(self, index, value):
        self.data[index] = value

clist = CustomList()
clist.data = [1, 2, 3]
print(clist[1])  # 输出: 2
clist[1] = 10
print(clist.data)  # 输出: [1, 10, 3]
3.3 魔法函数一览

魔法函数分为两类:非数学运算和数学运算。

3.3.1 非数学运算
  • __init__(self, ...):初始化对象时调用。
  • __del__(self):对象被销毁时调用。
  • __str__(self)str()print() 函数调用时使用。
  • __repr__(self)repr() 函数调用时使用,通常返回一个字符串,该字符串应包含足够的信息以便能够用来重新创建对象。
  • __len__(self)len() 函数调用时使用。
  • __getitem__(self, key):用以获取指定键的值。
  • __setitem__(self, key, value):用以设置指定键的值。
  • __delitem__(self, key):用以删除指定键的值。
  • __iter__(self):返回一个迭代器。
  • __next__(self):返回迭代中的下一项。
  • __contains__(self, item):用于检查某个项是否在容器中。
示例代码
class Container:
    def __init__(self, *args):
        self.data = list(args)
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, index):
        return self.data[index]

container = Container(1, 2, 3)
print(len(container))  # 输出: 3
print(container[1])  # 输出: 2
3.3.2 数学运算
  • __add__(self, other):定义加法运算 +
  • __sub__(self, other):定义减法运算 -
  • __mul__(self, other):定义乘法运算 *
  • __truediv__(self, other):定义真除法运算 /
  • __floordiv__(self, other):定义整除法运算 //
  • __mod__(self, other):定义取模运算 %
  • __pow__(self, other, modulo=None):定义幂运算 **
  • __lt__(self, other):定义小于运算 <
  • __le__(self, other):定义小于等于运算 <=
  • __eq__(self, other):定义等于运算 ==
  • __ne__(self, other):定义不等于运算 !=
  • __gt__(self, other):定义大于运算 >
  • __ge__(self, other):定义大于等于运算 >=
示例代码
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)
    
    def __str__(self):
        return f"Point({self.x}, {self.y})"

p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2
print(p3)  # 输出: Point(4, 6)
3.4 随便举个例子说明魔法函数的重要性(len 函数)

为了说明魔法函数的重要性,让我们来看一个具体的例子:__len__ 方法。__len__ 方法允许我们使用 len() 函数来获取对象的长度。这在自定义容器类时特别有用。

示例代码
class CustomContainer:
    def __init__(self, *args):
        self.items = list(args)
    
    def __len__(self):
        return len(self.items)

container = CustomContainer(1, 2, 3, 4, 5)
print(f"容器的长度是 {len(container)}")  # 输出: 容器的长度是 5

通过实现 __len__ 方法,我们可以使用 len() 函数来获取 CustomContainer 对象的长度,这使得我们的类更加直观和易于使用。

3.5 本章小节

        在本章中,我们详细介绍了 Python 中的魔法函数,包括它们的定义、作用和常见的用法。我们探讨了魔法函数如何通过 Python 的数据模型来增强类的功能,并列举了非数学运算和数学运算的常见魔法函数。最后,我们通过 __len__ 方法的示例,说明了魔法函数在实际应用中的重要性。

通过理解和掌握魔法函数,我们可以编写出更加优雅和强大的 Python 代码,从而更好地利用 Python 的灵活性和动态性。如果你有任何疑问或想法,欢迎在评论区与我交流!


希望这些内容对你有帮助。如果你有任何问题或需要进一步的详细解释,请随时告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值