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的代码。你的解决方案是正确的。我看到这些输出是因为它们是由其他对象调用的,而不是由所讨论的对象调用的。。。愚蠢的我!然而,这让我有机会提交我想要的最好的代码,学习新的东西