类的实例化

本文介绍了Python中自定义迭代器的概念,通过一个Person类的示例解释了为何使用next方法多次仍只返回1的原因。作者指出,每次调用Person()实际上是创建了新的对象,因此需要先实例化一个对象再进行next操作才能按预期获取1, 2, 3等序列值。这对于理解Python迭代器的工作原理至关重要。
摘要由CSDN通过智能技术生成
from collections.abc import Iterator, Iterable

class Person():
    def __init__(self):
        self.i = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.i <= 100:
            ret = self.i
            self.i += 1
            return ret


print(next(Person()))
print(next(Person()))
print(next(Person()))

上述代码是我自定义的迭代器,通过isinstance判断是可迭代对象,也是迭代器

后面通过next想获取值,刚开始不知道为什么next那么多次了还是1,理想中的运行结果应该是1,2,3的。

后面通过调试,才知道。原来Person()其实就是实例化了一个对象,Person()了3次,也就是实例化了3个对象。这样每个对象的引用肯定是不一样的。

也就相当于next(Pserson())了3次,每次都只是获取1而已,后面的2,3,....其实是永远获取不到的。

除非先实例化一个对象p=Person(),然后通过next(f)方法调用3次,就能得到想要的结果1,2,3。

Python初始者wgx的第一编文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值