python 魔术方法

本文详细介绍了Python中的魔术方法,包括构造函数(__init__)、字符串表示(__str__和__repr__)、长度计算(__len__)、索引和赋值操作(__getitem__,__setitem__,__delitem__)、函数调用(__call__)、运算符重载(__add__)以及迭代器接口(__iter__,__next__)。通过实例展示了如何在自定义类中重写这些方法以实现特定功能。
摘要由CSDN通过智能技术生成

Python中的魔术方法(Magic Methods)是指以双下划线开头和结尾的特殊方法。这些方法在类被调用时会自动触发,可以对其进行重写来改变默认行为或添加额外功能。

以下是常用的一些魔术方法及其作用:

  1. __init__:构造函数,当创建新对象时自动调用。通过该方法可以初始化对象的属性。

  2. __str__:返回对象的字符串表示形式。当使用print语句打印对象时,将调用此方法获取输出内容。

  3. __repr__:与__str__相似,也是返回对象的字符串表示形式。不同之处在于__repr__应该提供更多关于对象状态的信息。

  4. __len__:返回对象的长度。当使用len()函数计算对象的长度时,将调用此方法。

  5. __getitem____setitem____delitem__:分别用于索引操作(如obj[key])、设置值操作(如obj[key]=value)和删除元素操作(如del obj[key])。

  6. __call__:使得对象可以像函数一样被调用。当对象后面加上小括号并传入参数时,将调用此方法。

  7. __add____sub__等:用于支持运算符重载,比如+、-、*、/等。

  8. __eq____ne____lt____gt____le____ge__:用于支持比较运算符重载,比如==、!=、<、>、<=、>=等。

  9. __iter____next__:用于支持迭代器接口,使得对象可以被for循环遍历。

以下是一个自定义类的例子,展示了如何重写部分魔术方法:

class MyClass:
    def __init__(self):
        self.data = []
    
    # 重写__str__方法,返回对象的字符串表示形式
    def __str__(self):
        return f"MyClass object with data {self.data}"
        
    # 重写__len__方法,返回对象的长度
    def __len__(self):
        return len(self.data)
    
    # 重写__getitem__方法,支持索引操作
    def __getitem__(self, key):
        if isinstance(key, int):
            return self.data[key]
        else:
            raise TypeError("Invalid index type")
            
# 测试自定义类
my_object = MyClass()
my_object.data = [1, 2, 3, 4, 5]
print(my_object)   # 输出:MyClass object with data [1, 2, 3, 4, 5]
print(len(my_object))   # 输出:5
print(my_object[0])   # 输出:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值