在自定义类中__getitem__ 和 __next__ 的使用

目录

1.__getitem__

原理:

代码示例

2.__next__

原理

代码示例


__getitem__ 和 __next__ 是 Python 中常用的特殊方法,用于在自定义类中实现对象的索引访问和迭代功能。

1.__getitem__

__getitem__方法用于实现对象的索引访问,通过下标访问对象的元素。 - 当对象使用中括号 [] 进行索引访问时,会调用该方法。  可以在自定义类中实现 __getitem__ 方法,使对象能够实现类似列表、字典等的索引功能。

原理:

 __getitem__实现索引的方法为接收一个参数 index,根据 index 返回对象中对应的元素,同时可以对索引的内容进行更改。

代码示例

class USE_getitem():
    def __init__(self, text):
        self.text = text

    def __getitem__(self, index):
        # 将指定索引位置的字符转换为大写形式
        result = self.text[index].upper()
        return result

# 创建类实例并测试
p = USE_getitem("pytorch")
print(p[0], p[1])  
# 输出: P Y

这段代码定义了一个名为 USE_getitem 的类,该类实现了 __getitem__ 方法,用于按索引获取文本中字符并将其转换为大写形式。在类的初始化方法中,将给定的文本保存在实例变量 text 中。 __getitem__ 方法接收一个索引参数,返回该索引位置上字符的大写形式。 在主程序中,创建了一个 USE_getitem 实例 p ,并将字符串"pytorch"传递给它。然后通过 print(p[0], p[1]) 语句分别获取索引为0和1的字符并打印出来,输出结果为"P Y",即将索引0和1位置上的字符转换为大写形式后输出。

2.__next__

__next__ 方法用于实现对象的迭代功能,通过迭代器逐个访问对象的元素。  当对象使用 next() 函数进行迭代时,会调用该方法。 可以在自定义类中实现 __next__ 方法,使对象支持迭代操作。

原理

__next__ 实现迭代的方法是通过迭代器的方式逐个返回对象中的元素,当没有元素可返回时,抛出 StopIteration 异常。

代码示例

class USE_next():
    def __init__(self, text):
        self.text = text
        self.index = 0
    def __next__(self):
        if self.index < len(self.text):
            value = self.text[self.index]  # 返回小写字符
            self.index += 1
            return value
        else:
            raise StopIteration
    def __iter__(self):
        # 为了使对象可迭代,需要实现 __iter__ 方法
        # 它应该返回迭代器自身
        return self
p = USE_next("pytorch")
for i in p:
    print(i)  # 打印迭代过程中的每个字符
#输出:p
#     y
#     t
#     o 
#     r
#     c  
#     h

这段代码定义了一个名为 USE_next 的类,该类实现了一个迭代器,用于迭代给定文本中的小写字符。在类的初始化方法中,将给定的文本保存在实例变量 text 中,并初始化 index 为0。实现了 __next__ 方法来定义迭代器的行为,每次调用 __next__ 方法时,返回当前索引位置的小写字符,并将索引加1。当索引超出文本长度时,抛出 StopIteration 异常。还实现了 __iter__ 方法,返回迭代器自身,以使对象可迭代。 在主程序中创建了一个 USE_next 实例 p ,并将字符串"pytorch"传递给它。然后通过 for 循环迭代 p ,打印出文本中的每个小写字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值