我发现魔术方法和魔术方法去掉下换线之后可以使用内置方法这样成对地使用,
可以看到如下的__iter__和__next__对应的被调用时候的方法。
class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
my_obj = MyIterable([1, 2, 3])
iter_obj = iter(my_obj)
print(iter_obj is my_obj)
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
result = self.data[self.index]
self.index += 1
return result
my_iter = MyIterator([1, 2, 3])
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
try:
print(next(my_iter))
except StopIteration:
print("迭代结束")
1、请问是否是所有魔术方法都符合此规律?
2、Python在设计的时候,是否就是这样设计然后让我们可以进行调用呢?
iter
不只可以用__iter__
,也可以用__getitem__
。vars
用的是__dict__
。具体还是看文档,每个函数可能都不太一样。__iter__
跟__next__
的自定义类就可以当迭代器用。通常不会去直接调用这些魔法函数。