📅  最后修改于: 2023-12-03 15:19:36.871000             🧑  作者: Mango
Python魔术方法是一种特殊的方法,它们用于重载Python类的内置行为。Python魔术方法的名称以两个下划线开始和结尾,比如__init__
。它们被称为“魔术”方法,因为它们允许您在方法调用或对象使用之前或之后执行其他操作。Python魔术方法可以使您的代码更具灵活性和可读性。
以下是一些常见的Python魔术方法:
__init__(self, ...)
这是Python中最常用的一个魔术方法,用于初始化类的实例。当创建一个对象时,Python会自动调用__init__
方法。您可以在这里设置对象的初始状态。
class MyClass:
def __init__(self, name):
self.name = name
my_obj = MyClass('John')
print(my_obj.name) # output: John
__str__(self)
该方法定义了对象的字符串表示形式。当您使用print
函数或str
函数显式对象时,Python会自动调用该方法。
class MyClass:
def __init__(self, name):
self.name = name
def __str__(self):
return f'MyClass[name={self.name}]'
my_obj = MyClass('John')
print(str(my_obj)) # output: MyClass[name=John]
__len__(self)
__len__
方法返回对象的长度,它主要用于序列类型,比如列表、字符串和元组。
class MyList:
def __init__(self, items=[]):
self.items = items
def __len__(self):
return len(self.items)
my_list = MyList([1, 2, 3, 4])
print(len(my_list)) # output: 4
__add__(self, other)
__add__
方法是用于对象加法的魔术方法。当您在两个对象之间使用加法运算符时,Python会自动调用该方法。
class MyNumber:
def __init__(self, value):
self.value = value
def __add__(self, other):
return MyNumber(self.value + other.value)
num1 = MyNumber(10)
num2 = MyNumber(20)
num3 = num1 + num2
print(num3.value) # output: 30
__contains__(self, item)
该方法用于检查对象是否包含指定的值。它主要用于容器类型,比如列表、字典等。
class MyList:
def __init__(self, items=[]):
self.items = items
def __contains__(self, item):
return item in self.items
my_list = MyList([1, 2, 3, 4])
print(2 in my_list) # output: True
print(5 in my_list) # output: False
这只是一些常见的Python魔术方法,您可以根据需要定义自己的魔术方法。这些方法可以大大提高您的代码的灵活性和可读性。