__getitem__方法与 __setitem__方法、__contains__方法、__item__方法与__next__方法

Python相关语法

第一章:Yield方法与Return方法
第二章: __getitem__方法 与 __setitem__方法
__contains__方法、__item__方法、__next__方法

第三章:__dict__方法与__odict__方法
第四章:__name__方法


一、getitem 函数 与 setitem 函数 代码


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

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

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

my_list = MyList()
my_list.items = [1, 2, 3, 4, 5]

# 使用索引方式访问元素
print(my_list[2])  # 输出: 3

# 使用索引方式设置元素
my_list[1] = 10
print(my_list.items)  # 输出: [1, 10, 3, 4, 5]
  1. 在上面的示例中,MyList 类实现了\__getitem\__ 方法__setitem__方法,允许通过索引的方式访问和修改列表中的元素。
  2. 使用类似索引的语法 my_list[2] 可以调用 \__getitem\__ 方法获取列表中的元素。
  3. 类似地,使用类似索引赋值的语法 my_list[1] = 10 可以调用 __setitem__方法修改列表中的元素。

二、__getitem__函数

__getitem__(self, index) 方法定义了对对象使用索引或切片操作时的行为。它接受一个参数 index,表示要访问的元素的索引或切片。该方法应返回对应索引或切片的元素值

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

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

my_list = MyList()
my_list.items = [1, 2, 3, 4, 5]

print(my_list[2])  # 输出: 3
print(my_list[1:4])  # 输出: [2, 3, 4]

如何调用__getitem__方法

if UNK in self: #UNK是指向未知词汇 #调用了__contains__方法
    return self[UNK]#调用了__getitem__方法

三、__setitem__方法

  1. __setitem__(self, index, value) 方法定义了对对象进行索引赋值操作时的行为。它接受两个参数 index 和 value,表示要设置的元素的索引和值。该方法应在给定的索引处设置相应的值。
class MyList:
    def __init__(self):
        self.items = []

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

my_list = MyList()
my_list.items = [1, 2, 3, 4, 5]

my_list[2] = 10
print(my_list.items)  # 输出: [1, 2, 10, 4, 5]

  1. 如何调用__setitem__方法
if UNK in self: #UNK是指向未知词汇 #调用了__contains__方法
    self[UNK]=“UNK”#调用了__setitem__方法

四、__contains__方法

  1. 当使用 in 运算符来检查一个对象是否在另一个对象中时,它会自动调用目标对象的 __contains__ 方法。如果目标对象没有定义 __contains__ 方法,它会尝试迭代对象来查找匹配项
class MyList:
    def __init__(self):
        self.items = []

    def __contains__(self, item):
        return item in self.items

my_list = MyList()
my_list.items = [1, 2, 3]

print(1 in my_list)  # 输出: True
print(4 in my_list)  # 输出: False

  1. 如何调用__contains__方法
 if entry in self:
    return self._token_to_symbol[entry] #返回symbol对象

这将会自动调用self中的__contains__方法

五、__iter__方法与__next__方法

  1. 对于一个类的实例对象,如果希望其能够进行迭代,需要在类中实现迭代器接口。迭代器接口包括定义 __iter__() 方法和 __next__() 方法
class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value


class MyClass:
    def __init__(self, data):
        self.data = data

    def __iter__(self):
        return MyIterator(self.data)


my_obj = MyClass([1, 2, 3, 4, 5])

for item in my_obj:
    print(item)
# 输出
# 1
# 2
# 3
# 4
# 5

MyIterator 类实现了迭代器接口,它维护了一个数据列表 data 和一个索引 index。在 __iter__() 方法中,返回了迭代器对象 self。__next__() 方法定义了迭代器的行为,每次调用返回列表中的下一个元素,直到到达末尾时抛出 StopIteration 异常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值