第十八节:魔术方法和特殊方法

第十八节:魔术方法和特殊方法

不过尔尔 7 2021-07-16

在Python中,魔术方法(也称为特殊方法或双下划线方法)是具有特殊名称和功能的方法,它们在类中起着重要作用。这些方法的名称以双下划线开头和结尾,例如 __init____str____add__ 等。它们用于定义类的行为,使得类的实例可以在某些操作中表现得像内置类型一样。下面是一些常用的魔术方法的示例:

__init__

__init__ 方法是类的构造方法,它在创建对象时自动调用,用于初始化对象的属性。

 class Person:
     def __init__(self, name, age):
         self.name = name
         self.age = age
 ​
 # 创建Person类的实例
 person = Person("Alice", 30)

__str__

__str__ 方法用于定义对象的字符串表示形式,通常用于 print 函数和 str() 转换。

 class Person:
     def __init__(self, name, age):
         self.name = name
         self.age = age
 ​
     def __str__(self):
         return f"{self.name}, {self.age} years old"
 ​
 person = Person("Alice", 30)
 print(person)  # 输出: "Alice, 30 years old"

__add__

__add__ 方法用于定义对象的加法操作。

 class ComplexNumber:
     def __init__(self, real, imag):
         self.real = real
         self.imag = imag
 ​
     def __add__(self, other):
         return ComplexNumber(self.real + other.real, self.imag + other.imag)
 ​
 num1 = ComplexNumber(1, 2)
 num2 = ComplexNumber(3, 4)
 result = num1 + num2
 print(result.real, result.imag)  # 输出: 4 6

__len__

__len__ 方法用于定义对象的长度。

 class MyList:
     def __init__(self, items):
         self.items = items
 ​
     def __len__(self):
         return len(self.items)
 ​
 my_list = MyList([1, 2, 3, 4, 5])
 print(len(my_list))  # 输出: 5

__getitem____setitem__

__getitem____setitem__ 方法用于定义对象的索引操作。

 class MyList:
     def __init__(self, items):
         self.items = items
 ​
     def __getitem__(self, index):
         return self.items[index]
 ​
     def __setitem__(self, index, value):
         self.items[index] = value
 ​
 my_list = MyList([1, 2, 3, 4, 5])
 print(my_list[2])  # 输出: 3
 my_list[2] = 10
 print(my_list[2])  # 输出: 10

这些魔术方法允许你自定义类的行为,使其更符合你的需求。通过合理使用魔术方法,你可以创建具有强大功能的自定义类,并且可以与内置类型一样方便地使用它们。