重写方法期间的奇怪继承
Strange inheritance during the override of a method
我正在开发相互继承的不同对象。
有一次我注意到超级方法的代码仍然由继承的方法执行。
从下面列出的子方法可以看出,我注释了super()
来阻止superclass代码被执行。
这是超级class:
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!!!'
代码有效。
但我不想看到 superMethod
打印。
有没有办法阻止 superMethod 从 运行 并使 subMethod 只执行?
因为到目前为止我可以看到两个打印输出。
我希望这是我在 OOP 上的缺点。
PS:正如您从标签中看到的那样,我正在使用 Jython 2.7。
必须有另一种解释,例如,如果涉及更多 class,并且还有另一个 class 继承自 superClass
,但不会覆盖 superMethod
.
以下代码(我使用的是 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!
我正在开发相互继承的不同对象。
有一次我注意到超级方法的代码仍然由继承的方法执行。
从下面列出的子方法可以看出,我注释了super()
来阻止superclass代码被执行。
这是超级class:
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!!!'
代码有效。
但我不想看到 superMethod
打印。
有没有办法阻止 superMethod 从 运行 并使 subMethod 只执行?
因为到目前为止我可以看到两个打印输出。
我希望这是我在 OOP 上的缺点。
PS:正如您从标签中看到的那样,我正在使用 Jython 2.7。
必须有另一种解释,例如,如果涉及更多 class,并且还有另一个 class 继承自 superClass
,但不会覆盖 superMethod
.
以下代码(我使用的是 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!