- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有一个基类:
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/
我正在实现本质上是一个容器对象(尽管它确实有一些自己的逻辑)。我希望能够迭代此类(这只是一个普通列表)中的一个字段中的项目。我应该为我的类(class)重新实现 __iter__ 和 next 还是可
本人python水平很差,请不要打我。 >>> a = ['a', 'b', 'c'] >>> a.__iter__() >>> a.__iter__().__iter__() 我看到这两个 li
在 python 2.7 和 python 3.7 中,我可以执行以下操作: string = "hello world" for letter in string: print(letter
假设我有一个基类: class Base: A = False B = '' C = '' def __iter__(self): yield 'a',
Python 类定义中的 __iter__ 方法主体有何意义?据我了解, __iter__ 方法必须返回一个迭代器;那么每个 __iter__ 方法不应该只包含一个返回迭代器(在其他地方定义)的 re
我正在尝试创建一个二维数组类并希望使矩阵可迭代。有谁知道该怎么做?我是 python 类(class)的新手,但仍在掌握窍门。另外,如何在我的 main 中实现 str ?如果我只使用 print(c
我读了一本有关 Python 高级主题的书。作者试图解释生成器。 这是他要解释的例子: class rev: def __init__(self,data): self.dat
不确定标题是否清楚,但我有一个对象,它的属性是另一种对象的字典。键是引用对象的 id。我想实现 iter 方法,以便生成这些 key ,但我不确定如何操作。它应该相当简单,但我在 python 文档中
def __init__(self, maximum, start=0, step=1): """Sets the maximum, start, and step"""
我想做的是重用生成器 class Rect(object): ... def __iter__(self): for y in xrange(self.tl.y, self.
使用__iter__有什么好处? Python 类中的函数? 在下面的代码中,我只是设置两个简单的类。第一类接受一个列表作为参数,我可以在不使用 __iter__ 的情况下循环这个列表。功能。第二位代
我不明白为什么 __iter__ 特殊方法只返回调用它的对象(如果它是在迭代器上调用的)。它本质上只是一个标志,表明该对象是一个迭代器吗? 编辑:实际上,我发现“这是允许容器和迭代器与 for 和 i
我有一个对象子类,它使用缓存生成器实现动态调度 __ iter __(我还有一个使 iter 缓存无效的方法),如下所示: def __iter__(self): print("iter ca
尽管阅读了它,但我仍然不太明白 __iter__ 是如何工作的。什么是简单的解释? 我见过 def__iter__(self): return self。我看不到它是如何工作的,也不知道它是如何工作的
我正在实现搜索算法 (BFS) 并具有以下 Node 类: class Node: def __init__(self, state=None, action=None, path_cost=
我有一个 Python 2.7 类(称之为 Child),它是另一个类(Parent)的子类,而另一个类本身就是 dict 的子类。 我正在尝试定义 __iter__在 child 中希望当有人做di
我想将一个类的所有实例存储在一个列表中,并想对其进行迭代。 我尝试了以下两种方法: 1 使用元类 class ClassIter(type): def __iter__(cls):
来源 def flags(*opts): keys = [t[0] for t in opts] words = [t[1] for t in opts] nums = [2*
假设您使用包装器对象: class IterOrNotIter: def __init__(self): self.f = open('/tmp/toto.txt')
我有一个标准的二叉树,如下所示 1 /\ 2 3 /\/\ 4 5 6 7 我需要通过导入我的树类来读取二叉树,创建这棵树,然后使用 for 循环读取它,如:[4, 2, 5, 1, 6, 3, 7]
我是一名优秀的程序员,十分优秀!