#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 34. Спасибо за совет! Я использую python 3 всякий раз, когда это возможно, к сожалению, здесь это неизбежно в краткосрочной перспективе
5. «более идиоматический способ сделать это?» : Это способ сделать это, объясните более подробно, почему вы думаете, что это не нормально.