Python 如何最好地引用父类中的生成器函数?

Python 如何最好地引用父类中的生成器函数?,python,python-3.x,Python,Python 3.x,我有一个类层次结构,在父类中,我有一个生成器函数,我有时需要按原样使用它。在派生类中,我有一个首选生成器。如果使用super()将父生成器函数指定给变量(即指向函数的指针),则会出现以下错误: Traceback (most recent call last): File "foo.py", line 22, in <module> for i in baz.generator(): File "foo.py", line 11, in generator f

我有一个类层次结构,在父类中,我有一个生成器函数,我有时需要按原样使用它。在派生类中,我有一个首选生成器。如果使用
super()
将父生成器函数指定给变量(即指向函数的指针),则会出现以下错误:

Traceback (most recent call last):
  File "foo.py", line 22, in <module>
    for i in baz.generator():
  File "foo.py", line 11, in generator
    for i in self.f():
AttributeError: 'bar' object has no attribute 'f'

这些评论很有帮助。以下两行更改解决了此问题:

class bar(foo):       # derived
    def generator(self, override=True):
        f = self.generator2 if override else super().generator
        for i in f():
            yield i

更改为
bar.generator的
self.generator2
super()
foo
f(self)
f()
,因为
f
现在引用了对象中的方法。

注释非常有用。以下两行更改解决了此问题:

class bar(foo):       # derived
    def generator(self, override=True):
        f = self.generator2 if override else super().generator
        for i in f():
            yield i

更改为
bar.generator的
self.generator2
super()
foo
f(self)
f()
,因为
f
现在引用对象中的方法。

您在哪里尝试使用
super
?您的代码(和回溯)没有显示它。请注意,Python使用的是
名称
,而不是
变量
。像“变量(即指向函数的指针)”一样思考对于其他语言来说是很好的,但这会使您更难理解Python中发生了什么。在你的方法中,
self
是指对象的
name
(这里:“self”是由“baz”命名的同一事物的名称),而“foo”和
bar
是类的名称。您需要属于对象而不是类的方法,因此像
self.generator
self.generator2
这样的方法会更有用。是的,虽然我只是想同意上面的解释,但最好还是把整个“指针”术语抛在脑后,虽然向来自不同语言的人解释python中的一些语义可能会有所帮助,但最好是理解python本身的术语,而python没有指针。函数是一级对象,与
列表
int
完全相同。将函数分配给变量就像将
int
list
分配给变量一样平凡variable@jalanb
bar.generator
self.generator
不一样。前者是类中以
self
为第一个参数的方法,后者是实例方法。但是想想你的评论,我就知道是怎么回事了。很抱歉遗漏了细节。在试图让帖子通过时,编辑过程中丢失了一些东西。@juanpa.arrivillaga被攻占。很明显,python既不是我的第一种编程语言,也不是我的主要编程语言。您在哪里尝试过使用
super
?您的代码(和回溯)没有显示它。请注意,Python使用的是
名称
,而不是
变量
。像“变量(即指向函数的指针)”一样思考对于其他语言来说是很好的,但这会使您更难理解Python中发生了什么。在你的方法中,
self
是指对象的
name
(这里:“self”是由“baz”命名的同一事物的名称),而“foo”和
bar
是类的名称。您需要属于对象而不是类的方法,因此像
self.generator
self.generator2
这样的方法会更有用。是的,虽然我只是想同意上面的解释,但最好还是把整个“指针”术语抛在脑后,虽然向来自不同语言的人解释python中的一些语义可能会有所帮助,但最好是理解python本身的术语,而python没有指针。函数是一级对象,与
列表
int
完全相同。将函数分配给变量就像将
int
list
分配给变量一样平凡variable@jalanb
bar.generator
self.generator
不一样。前者是类中以
self
为第一个参数的方法,后者是实例方法。但是想想你的评论,我就知道是怎么回事了。很抱歉遗漏了细节。在试图让帖子通过时,编辑过程中丢失了一些东西。@juanpa.arrivillaga被攻占。很明显,python既不是我的第一语言,也不是我的主要编程语言。