📜  Python中的 __getitem__ 和 __setitem__(1)

📅  最后修改于: 2023-12-03 14:46:32.864000             🧑  作者: Mango

Python中的 __getitem__ 和 __setitem__

在Python中,__getitem__ 和 __setitem__ 是两个特殊的方法,它们用于访问对象的索引和为对象的索引赋值。这两个方法提供了一种灵活的方式来实现自定义的容器对象,如列表、字典和其他可迭代对象。

__getitem__

__getitem__ 是一个用于获取对象的索引值的方法。当我们使用简化的索引语法(如 obj[index])访问对象时,__getitem__ 方法会被自动调用。我们可以根据需要实现这个方法,以支持对象的索引访问。

下面是一个实现自定义列表的例子:

class MyList:
    def __init__(self):
        self.data = []

    def __getitem__(self, index):
        return self.data[index]

    def __setitem__(self, index, value):
        self.data[index] = value

my_list = MyList()
my_list[0] = 'Hello'
my_list[1] = 'World'
print(my_list[0])  # 输出: Hello
print(my_list[1])  # 输出: World

在这个例子中,我们自定义了一个名为 MyList 的类,并实现了 __getitem__ 方法,允许通过简化的索引语法来访问列表元素。当我们执行 my_list[0] 和 my_list[1] 时,__getitem__ 方法会返回相应的元素。

__setitem__

__setitem__ 是一个用于为对象的索引赋值的方法。当我们使用简化的赋值语法(如 obj[index] = value)时,__setitem__ 方法会被自动调用。我们可以根据需要实现这个方法,以支持对象的索引赋值。

下面是一个使用自定义字典的例子:

class MyDict:
    def __init__(self):
        self.data = {}

    def __getitem__(self, key):
        return self.data[key]

    def __setitem__(self, key, value):
        self.data[key] = value

my_dict = MyDict()
my_dict['name'] = 'Alice'
my_dict['age'] = 25
print(my_dict['name'])  # 输出: Alice
print(my_dict['age'])  # 输出: 25

在这个例子中,我们自定义了一个名为 MyDict 的类,并实现了 __setitem__ 方法,允许通过简化的赋值语法为字典赋值。当我们执行 my_dict['name'] = 'Alice' 和 my_dict['age'] = 25 时,__setitem__ 方法会将相应的键值对添加到字典中。之后,通过访问 my_dict['name'] 和 my_dict['age'],__getitem__ 方法会返回相应的值。

这种重载索引操作的能力可以使我们的自定义对象表现得像内置的容器对象一样,从而提供更灵活的操作方式。

总结

在Python中,__getitem__ 和 __setitem__ 方法分别用于获取对象的索引值和为对象的索引赋值。我们可以根据需要实现这两个方法,以支持对象的索引访问和赋值。这使得我们能够创建自定义的容器对象,并以一种简化、一致的方式与这些对象进行交互。