Python的类魔法序列是一组特殊方法,它们用于在类定义中处理序列操作。这些方法允许我们自定义我们的类的行为,以便它可以像Python的内置序列一样进行操作。以下是一些常用的类魔法序列:
__len__(self) __getitem__(self, index) __setitem__(self, index, value) __delitem__(self, index) __iter__(self) __reversed__(self) __contains__(self, item)
__len__(self)方法返回序列中元素的数量。它应该以整数的形式返回序列的长度。例如:
class MySequence: def __init__(self, data): self.data = data def __len__(self): return len(self.data) seq = MySequence([1, 2, 3, 4]) print(len(seq)) # 输出 4
__getitem__(self, index)方法允许我们像列表一样访问序列中的元素。它接收一个索引并返回对应元素。例如:
class MySequence: def __init__(self, data): self.data = data def __getitem__(self, index): return self.data[index] seq = MySequence([1, 2, 3, 4]) print(seq[1]) # 输出 2
__setitem__(self, index, value)方法允许我们像列表一样修改序列中的元素。它接收一个索引和一个值,并使用该值替换对应位置的元素。例如:
class MySequence: def __init__(self, data): self.data = data def __setitem__(self, index, value): self.data[index] = value seq = MySequence([1, 2, 3, 4]) seq[1] = 5 print(seq.data) # 输出 [1, 5, 3, 4]
__delitem__(self, index)方法允许我们从序列中删除一个元素。它接收一个索引并删除对应位置的元素。例如:
class MySequence: def __init__(self, data): self.data = data def __delitem__(self, index): del self.data[index] seq = MySequence([1, 2, 3, 4]) del seq[1] print(seq.data) # 输出 [1, 3, 4]
__iter__(self)方法允许我们在序列上进行迭代。它应该返回一个可迭代对象。例如:
class MySequence: def __init__(self, data): self.data = data def __iter__(self): return iter(self.data) seq = MySequence([1, 2, 3, 4]) for i in seq: print(i) # 输出 1 2 3 4
__reversed__(self)方法允许我们逆序迭代序列。它应该返回一个可逆序迭代对象。例如:
class MySequence: def __init__(self, data): self.data = data def __reversed__(self): return reversed(self.data) seq = MySequence([1, 2, 3, 4]) for i in reversed(seq): print(i) # 输出 4 3 2 1
__contains__(self, item)方法允许我们检查序列中是否包含特定元素。它应该返回一个布尔值。例如:
class MySequence: def __init__(self, data): self.data = data def __contains__(self, item): return item in self.data seq = MySequence([1, 2, 3, 4]) print(3 in seq) # 输出 True