python 魔术方法

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

你可能感兴趣的:(python,开发语言)