Питонический способ возврата из метода с использованием логики в переопределенном методе

#python #python-2.7 #inheritance #super

#python #python-2.7 #наследование #супер

Вопрос:

У меня есть унаследованный класс, который использует super() для вызова переопределенного родительского метода. Я хотел бы вернуться из дочернего метода на основе логики в родительском методе. Вот моя реализация, но мне интересно, есть ли более идиоматичный способ сделать это?

 class ParentClass:
    def __init__(self, parameter):
        self.parameter = parameter

    def method(self):
        if self.parameter:
            return True
        else:
            # Do more logic here
            pass

class ChildClass(ParentClass, object):
    def __init__(*args):
        ParentClass.__init__(*args)

    def method(self):
        return_from_method = super(ChildClass, self).method()
        if return_from_method:  # Is there a better way to do this?
            print('Returning from method')
            return
        else:
            print('Not returning from method')
            # Do more logic here

a = ChildClass(True)
a.method()
# > 'Returning from method'
  

Комментарии:

1. Есть ли причина, по которой вам нужно заменить родительский метод method() , а затем вызвать его через super, в отличие от создания дочернего метода с другим именем и последующего вызова self.method() ?

2. Я думаю, технически мне не нужно его переопределять, но дочерний элемент method действительно является расширением родительского method , поэтому для удобства чтения и логической согласованности я решил сделать это следующим образом.

3. Кроме того, в python 2.7 вы всегда должны наследовать от object . А еще лучше, используйте Python 3

4. Спасибо за совет! Я использую python 3 всякий раз, когда это возможно, к сожалению, здесь это неизбежно в краткосрочной перспективе

5. «более идиоматический способ сделать это?» : Это способ сделать это, объясните более подробно, почему вы думаете, что это не нормально.