如何使自定义类与Python中的for-in循环一起工作?

2024-04-23 10:45:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个自定义类,如何使其与“for-in”循环一起工作,如下所示:

class number_range:
    def __init__(self, start, end):
        self.__data = []
        for i in range(start, end):
            self.__data.append(i)
    #something that will allow the for in loop

numbers = number_range(1, 100)          
for number in numbers:
    print(number)

Tags: inselfnumberfordatathatinitdef
1条回答
网友
1楼 · 发布于 2024-04-23 10:45:29

你要找的是一个迭代器。例如,这个函数的作用类似于range,但只给出奇数:

class oddrange(object):
    def __init__(self, first, lastPlusOne):
        # Ensure start at first odd >= given start, store terminator.

        self.__curr = first + 1 - first % 2
        self.__term = lastPlusOne

    def __iter__(self):
        return self

    def __next__(self):
        # Terminate if range over, otherwise return current, calculate next.

        if self.__curr >= self.__term:
            raise StopIteration()

        (cur, self.__curr) = (self.__curr, self.__curr + 2)
        return cur

您可以通过调用代码看到这一点:

for i in oddrange(-5, 9): print(i, end = ' ')
print()
for i in oddrange(-3, 9): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()

这会产生:

-5 -3 -1 1 3 5 7
-3 -1 1 3 5 7
-3 -1 1 3 5 7 9
-3 -1 1 3 5 7 9

请注意,这与python2不兼容,因为网上有很多例子。我想我们早就应该接受Python2已经完成这一事实了,我们继续前进吧:-)

如果您真的需要它,您可以将它添加到类中:

def next(self): return self.__next__()

相关问题 更多 >