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]
- 在上面的示例中,MyList 类实现了
\__getitem\__ 方法
和__setitem__方法
,允许通过索引的方式访问和修改列表中的元素。- 使用类似索引的语法
my_list[2]
可以调用\__getitem\__
方法获取列表中的元素。- 类似地,使用类似索引赋值的语法
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__方法
__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]
- 如何调用
__setitem__方法
if UNK in self: #UNK是指向未知词汇 #调用了__contains__方法
self[UNK]=“UNK”#调用了__setitem__方法
四、__contains__方法
- 当使用
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
- 如何调用
__contains__方法
if entry in self:
return self._token_to_symbol[entry] #返回symbol对象
这将会自动调用self中的__contains__
方法
五、__iter__方法与__next__方法
- 对于一个类的实例对象,如果希望其能够进行迭代,需要在类中实现迭代器接口。迭代器接口包括定义
__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 异常