Python常用魔法函数

137 阅读2分钟

在Python中,魔法函数(Magic Methods)也被称为特殊方法(Special Methods)。它们是一些以双下划线(__)开头和结尾的方法,用于实现类的特殊功能。本文将介绍一些常用的魔法函数及其用法。

1. __init____del__

__init__ 是一个构造方法,当创建类的实例时会自动调用。__del__ 是一个析构方法,当删除类的实例时会自动调用。

class MyClass:
def **init**(self):
print("创建实例")

    def __del__(self):
        print("删除实例")

obj = MyClass()  # 输出:创建实例
del obj  # 输出:删除实例

2. __str____repr__

__str__ 用于定义类的实例的字符串表示,当使用 print() 函数或 str() 函数时会调用。__repr__ 用于定义类的实例的“官方”字符串表示,当使用 repr() 函数时会调用。

class MyClass:
def **str**(self):
return "这是一个自定义的字符串表示"

    def __repr__(self):
        return "这是一个官方的字符串表示"

obj = MyClass()
print(obj)  # 输出:这是一个自定义的字符串表示
print(repr(obj))  # 输出:这是一个官方的字符串表示

3. __getitem____setitem__

__getitem__ 用于获取类的实例的元素,当使用 obj[key] 语法时会调用。__setitem__ 用于设置类的实例的元素,当使用 obj[key] = value 语法时会调用。

class MyClass:
def **getitem**(self, key):
return f"获取元素:{key}"

    def __setitem__(self, key, value):
        print(f"设置元素:{key} = {value}")

obj = MyClass()
print(obj\[1])  # 输出:获取元素:1
obj\[2] = "Python"  # 输出:设置元素:2 = Python

4. __len__

__len__ 用于获取类的实例的长度,当使用 len() 函数时会调用。

class MyClass:
def **len**(self):
return 5

obj = MyClass()
print(len(obj))  # 输出:5

5. __eq__, __ne__, __lt__, __le__, __gt__, __ge__

这些魔法函数用于定义类的实例之间的比较操作。分别对应等于(==)、不等于(!=)、小于(<)、小于等于(<=)、大于(>)和大于等于(>=)。

class MyClass:
def **init**(self, value):
self.value = value

    def __eq__(self, other):
        return self.value == other.value

    def __lt__(self, other):
        return self.value < other.value

obj1 = MyClass(1)
obj2 = MyClass(2)
print(obj1 == obj2)  # 输出:False
print(obj1 < obj2)  # 输出:True

以上就是一些常用的Python魔法函数。通过合理地使用这些魔法函数,可以让你的类更加符合Python的编程习惯,提高代码的可读性和可维护性。