📜  python双下划线方法 - Python(1)

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

Python双下划线方法

在Python中,有一些特殊的方法,以双下划线开头和结尾,被称为“dunder methods”(即“double underscore methods”,中文可以称之为“双下划线方法”或“魔法方法”),这些方法可以帮助程序员更方便地编写Python代码。在本篇文章中,我们将介绍Python双下划线方法的基本用法和常见应用。

__init__方法

__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__方法中定义了makemodelyear三个属性,在创建对象时我们传入这些属性的值,然后通过print(my_car.make)来获取对象的make属性值。

__str__方法

__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__方法,返回一个字符串表示形式,该字符串表示形式包括makemodelyear三个属性的值。

__len__方法

__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__方法。我们同样可以在自定义的对象中通过重写__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__方法。我们同样可以在自定义的对象中通过重写__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代码。使用双下划线方法,可以实现自定义对象的初始化、字符串表示形式、长度、索引值设置和获取等基本功能。在编写自定义对象时,鼓励程序员使用双下划线方法以增加代码的可读性和可维护性。