为什么这段代码会打印出无穷大的数字?

Why does this code print infinite numbers?

在这段代码中,为什么当我在 x1 = Chain("6") 中放入一个字符串 "6" 而不是 6 时,它在执行时打印出无限个数字?

class Chain:
    def __init__(self, n):
        self.n = n
        self.counter = 0

    def __next__(self):
        if self.counter != self.n:
            self.counter += 1
        else:
            raise StopIteration
        return self.counter

    def __iter__(self):
        return self


x1 = Chain("6")

for i in x1:
    print(i)

这一行x1 = Chain("6")设置了self.n = "6",这是一个字符串。在对象中,您将 counter 作为整数。整数永远不会等于字符串,因此您的 self.counter != self.n 始终 returns True 并且永远不会输入 else 块。

如果我是你,我会将你的 __init__ 修改为:

def __init__(self, n):
        self.n = int(n)
        self.counter = 0