Python 方法重写期间的奇怪继承
我正在开发相互继承的不同对象。Python 方法重写期间的奇怪继承,python,python-2.7,jython,jython-2.7,Python,Python 2.7,Jython,Jython 2.7,我正在开发相互继承的不同对象。有一次我注意到超级方法的代码仍然由继承的方法执行 从下面列出的子方法可以看出,我注释了super(),以防止超类代码被执行 这是超级课堂: class superClass(superClassOfSuperClass): def __init__(self, data): #[...] #unique call of the superMethod self.component.addActionListe
有一次我注意到超级方法的代码仍然由继承的方法执行
从下面列出的子方法可以看出,我注释了
super()
,以防止超类代码被执行这是超级课堂:
class superClass(superClassOfSuperClass):
def __init__(self, data):
#[...]
#unique call of the superMethod
self.component.addActionListener(self.superMethod)
#[...]
def superMethod(self, param):
print "I'm executed, but I don't have to be executed!"
这是子方法:
class subClass(superClass):
def __init__(self, data, newData):
superClass.__init__(self, data)
self.newData = newData
#[...]
def superMethod(self, param):
#super(superClass, self).superMethod(None)
print 'only I have to be printed!!!'
代码是有效的。
但是我不想看到超级方法打印出来。
有没有办法阻止超级方法运行并使子方法只执行?
因为到目前为止,我可以看到两个打印输出。
我希望这是我在OOP上的缺点
PS:我正在使用Jython 2.7,正如您从标记中看到的。必须有另一种解释,例如,如果涉及更多的类,并且有另一个类继承自超类,但不重写超级方法
以下代码(我使用的是python 3)显示了一切都应该正常工作:
class Super:
def __init__(self, listener):
listener.append(self.superMethod)
def superMethod(self, param):
print("I'm executed, but I don't have to be executed!")
class Sub(Super):
def superMethod(self, param):
print('Only me!')
methods = []
s = Sub(methods)
for method in methods:
method(None)
输出:
Only me!
你的呼叫站点是什么样子的?顺便说一句,superMethod
和subMethod
是不同的名称,通常不会相互覆盖。更正。调用实际上是在超类中进行的。这就是原因吗?我应该重写子类的\uuuuu init\uuuu
吗?您的调用站点是什么样子的?是超类的\uuuuuuuuu init\uuuuu
。我称之为:self.component.addActionListener(self.superMethod)
这是唯一一个我称之为superMethodOk的网站,这很有趣。请使用此新信息更新问题。事实上,请显示两个\uuuu init\uuuu
方法。我相信您是在类外调用方法。我要做的是重写一个已经在超类中赋值的方法(这是我以前做过的)。我将尝试删除旧方法,并通过另一种方式调用新方法…我问过你关于调用站点的问题,但你没有提供,因此在我的问题中,我必须自己创建一个。我们的两个超类都没有在它们的\uuuu init\uuuuu
方法中调用它们自己的任何方法当然,它没有被调用,我从来没有直接调用过它(例如:self.method(None)
),但它是一个侦听器。它仅在用户对UI执行操作时激活。尽管如此,它并没有完全覆盖。好吧,UI会像我在回答中模拟的那样进行调用。它在Python3中工作正常。也许Jython 2.7中有一些不同的功能。也许你可以试试我在Jython的代码。你的解决方案是正确的。我看到这些输出是因为它们是由其他对象调用的,而不是由所讨论的对象调用的。。。愚蠢的我!然而,这让我有机会提交我想要的最好的代码,学习新的东西