目录
__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
,打印出文本中的每个小写字符。