📅  最后修改于: 2023-12-03 15:19:32.175000             🧑  作者: Mango
在Python中,有一些特殊的方法,以双下划线开头和结尾,被称为“dunder methods”(即“double underscore methods”,中文可以称之为“双下划线方法”或“魔法方法”),这些方法可以帮助程序员更方便地编写Python代码。在本篇文章中,我们将介绍Python双下划线方法的基本用法和常见应用。
__init__
方法是一种特殊的构造函数,用于在创建对象时初始化其状态。在创建一个新的对象后,Python会自动调用__init__
方法,初始化对象的属性和方法。
以下是一个示例代码片段:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
my_car = Car('Audi', 'A4', 2021)
print(my_car.make) # Audi
在上面的示例代码中,我们定义了一个Car
类,并在__init__
方法中定义了make
、model
和year
三个属性,在创建对象时我们传入这些属性的值,然后通过print(my_car.make)
来获取对象的make
属性值。
__str__
方法是用于返回对象的字符串表示形式的方法,默认情况下返回对象的内存地址。我们可以重写__str__
方法以返回我们自己定义的字符串表示形式。
以下是一个示例代码片段:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def __str__(self):
return f"{self.make} {self.model} ({self.year})"
my_car = Car('Audi', 'A4', 2021)
print(my_car) # Audi A4 (2021)
在上面的代码片段中,我们在Car
类中重写了__str__
方法,返回一个字符串表示形式,该字符串表示形式包括make
、model
和year
三个属性的值。
__len__
方法是用于返回对象长度的方法。在内置数据类型(如字符串、列表)中,我们可以使用len()
函数获取对象的长度,这是因为它们都实现了__len__
方法。我们同样可以在自定义的对象中通过重写__len__
方法来获取对象的长度。
以下是一个示例代码片段:
class MyList:
def __init__(self, *args):
self.items = list(args)
def __len__(self):
return len(self.items)
my_list = MyList(1, 2, 3, 4, 5)
print(len(my_list)) # 5
在上面的代码片段中,我们定义了一个MyList
类,并重写了__len__
方法,将len()
函数应用于该类的实例时,将自动调用__len__
方法,返回实例中items
的长度。
__getitem__
方法是用于获取对象的索引值的方法。在内置数据类型(如字符串、列表)中,我们可以使用[]
运算符获取其中的元素,这是因为它们都实现了__getitem__
方法。我们同样可以在自定义的对象中通过重写__getitem__
方法来获取对象的元素。
以下是一个示例代码片段:
class MyList:
def __init__(self, *args):
self.items = list(args)
def __getitem__(self, index):
return self.items[index]
my_list = MyList(1, 2, 3, 4, 5)
print(my_list[0], my_list[1], my_list[2]) # 1, 2, 3
在上面的代码片段中,我们定义了一个MyList
类,并重写了__getitem__
方法,将my_list[i]
应用于该类的实例时,将自动调用__getitem__
方法,返回实例中的第i
个元素。
__setitem__
方法是用于设置对象的索引值的方法。在内置数据类型(如字符串、列表)中,我们可以使用[]
运算符设置其中的元素,这是因为它们都实现了__setitem__
方法。我们同样可以在自定义的对象中通过重写__setitem__
方法来设置对象的元素。
以下是一个示例代码片段:
class MyList:
def __init__(self, *args):
self.items = list(args)
def __setitem__(self, index, value):
self.items[index] = value
my_list = MyList(1, 2, 3, 4, 5)
my_list[0] = 100
print(my_list[0]) # 100
在上面的代码片段中,我们定义了一个MyList
类,并重写了__setitem__
方法,将my_list[i] = value
应用于该类的实例时,将自动调用__setitem__
方法,设置实例中的第i
个元素为value
。
在Python中,双下划线方法可以让程序员更方便地编写Python代码。使用双下划线方法,可以实现自定义对象的初始化、字符串表示形式、长度、索引值设置和获取等基本功能。在编写自定义对象时,鼓励程序员使用双下划线方法以增加代码的可读性和可维护性。