Документация Python 2 гласит, что функция super()«возвращает прокси-объект, который делегирует вызовы методов родительскому или родному классу типа».Что такое класс sibling в Python?
Вопросы:
- Что такое класс родственный в Python?
- Как вы передаете вызов метода классу родства?
Мое предположение заключалось в том, что родственный брат для данного класса является классом, который наследуется от одного и того же родителя. Я разработал следующий код, чтобы узнать, как вызов метода может быть передан брату, но он не работает. Что мне делать или понимать неправильно?
class ClassA(object):
def MethodA(self):
print "MethodA of ClassA"
class ClassB(ClassA):
def MethodB(self):
print "MethodB of ClassB"
class ClassC(ClassA):
def MethodA(self):
super(ClassC, self).MethodA()
def MethodB(self):
super(ClassC, self).MethodB()
if __name__ == '__main__':
ClassC().MethodA() # Works as expected
# Fail while trying to delegate method to a sibling.
ClassC().MethodB() # AttirbuteError: 'super' object has no attribute 'MethodB'
У меня нет времени, чтобы написать полный ответ, но я думаю, что документы относятся к множественному наследованию. Если класс C наследуется как от A, так и от B, вы можете рассматривать A и B как «братья и сестры» в некотором смысле. 'super()' вызовы в теле A на экземпляре C будут делегировать B. См. [этот вопрос] (http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with - множественное наследство) для низкого уровня. –
Принятый ответ на этот вопрос здесь объясняет детали того, как 'super()' действительно может вызывать родительские, но также и родственные классы: http://stackoverflow.com/questions/5033903/python-super-method-and-calling-alternatives –
@SimeonVisser, я видел этот вопрос, даже снял его. Он не дает четкого ответа на вопрос о том, что такое класс братьев и сестер. Этот вопрос связан с этим, но явно не является дубликатом. – golem