📜  Python魔术方法(1)

📅  最后修改于: 2023-12-03 15:19:36.871000             🧑  作者: Mango

Python魔术方法

Python魔术方法是一种特殊的方法,它们用于重载Python类的内置行为。Python魔术方法的名称以两个下划线开始和结尾,比如__init__。它们被称为“魔术”方法,因为它们允许您在方法调用或对象使用之前或之后执行其他操作。Python魔术方法可以使您的代码更具灵活性和可读性。

以下是一些常见的Python魔术方法:

1. __init__(self, ...)

这是Python中最常用的一个魔术方法,用于初始化类的实例。当创建一个对象时,Python会自动调用__init__方法。您可以在这里设置对象的初始状态。

class MyClass:
    def __init__(self, name):
        self.name = name
    
my_obj = MyClass('John')
print(my_obj.name)  # output: John
2. __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]
3. __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
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
5. __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魔术方法,您可以根据需要定义自己的魔术方法。这些方法可以大大提高您的代码的灵活性和可读性。