在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的编程习惯,提高代码的可读性和可维护性。