【发布时间】:2018-06-30 18:58:24
【问题描述】:
假设我有一个基类:
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
这当然只会在dict( Data() )上创建一个包含{ 'd': <value> }的字典,当数据类的实例转换为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
【问题讨论】:
-
请注意:这里没有创建字典。您的迭代器产生的元组可以传递给 dict(例如
dict(Base())和dict(Data())),但这不是一回事。 -
@BaileyParker 是的,这就是我的意思。我将实例传递给 dict() 以便我可以创建数据的 json
标签: python inheritance overriding iterable