Странное наследование при переопределении метода - PullRequest
1 голос
/ 18 октября 2019

Я разрабатываю различные объекты, которые наследуются друг от друга.
В какой-то момент я заметил, что код супер-метода все еще выполняется унаследованным методом.
Как видно из приведенного ниже под-метода, я прокомментировал 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!!!'

Код работает. Но я не хочу видеть печать superMethod.

Есть ли способ предотвратить запуск суперметода и заставить его выполнять только субметод? Потому что до сих пор я вижу оба вывода печати. ​​
Я надеюсь, что это мой недостаток в ООП.

PS: я работаю с Jython 2.7, как вы можете видеть из тегов.

1 Ответ

1 голос
/ 18 октября 2019

Должно быть другое объяснение, например, если задействовано больше классов и существует другой класс, который наследует от 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!
...