gpt4 book ai didi

python 3 : How to write a __iter__ method for derived class so that it extends on the behaviour of the base class' __iter__ method

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:22 25 4
gpt4 key购买 nike

假设我有一个基类:

class Base:
A = False
B = ''
C = ''

def __iter__(self):
yield 'a', self.A
yield 'b', self.B
yield 'c', self.C

然后是从这个基派生的类:

class Data(Base):
D = ''

def __iter__(self):
yield 'd', self.D

本类(class)仅创建一个包含{ 'd': <value> } 的字典在 dict( Data() ) , 当数据类的实例转换为 dict类型;因为据我了解,派生类 __iter__方法正在有效地覆盖基类 __iter__方法。

然后我尝试像在__init__() 中所做的那样从派生类重写方法调用基类方法功能:

def __iter__(self):
super().__iter__()
yield 'd', self.D

但是 IDE 将其标记为错误。为什么这不起作用?以及如何定义派生的 iter 方法来扩展已经存在的基类 iter 方法,以便我只需要为派生类中添加的变量添加 yield ?是否在派生类的 iter 方法中再次手动写出所有产量,这是目前我实现它的唯一解决方案?为什么?

class Data(Base):
D = ''

def __iter__(self):
yield 'a', self.A
yield 'b', self.B
yield 'c', self.C
yield 'd', self.D

最佳答案

这是行不通的,因为 super().__iter__() 是一个生成器,在此上下文中调用生成器没有意义。您想要做的是遍历该生成器返回的内容,并从 Data 中的 __iter__ 生成它们:

python 2:

def __iter__(self):
for i in super().__iter__():
yield i
yield 'd', self.D

但是在 Python 3 中,这可以更简洁地写成:

def __iter__(self):
yield from super().__iter__()
yield 'd', self.D

关于 python 3 : How to write a __iter__ method for derived class so that it extends on the behaviour of the base class' __iter__ method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48376607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com