2014-01-19 6 views
1

Какое из них является предпочтительным? Я считаю, что они идентичны в результате.Что такое соглашение в отношении метода переопределения суперкласса из подкласса?

self.inheritedMethodName(arguments) 

Или:

ParentClass.inheritedMethodName(self, arguments) 

Я знаю, есть также:

super().inheritedMethodName(arguments) 

Но я понимаю, что это не рекомендуется.

ответ

2

Первое, безусловно, предпочтительнее. Это основная особенность Python: instance.method(...) переведена на Class.method(instance, ...). Существует редко необходимость использовать вторую форму явно, и это только путает людей, читающих ваш код, так как они будут задаваться вопросом, почему вы это сделали.

В целом, почему вы будете вызывать метод по-разному в зависимости от того, переопределяете его или нет? В общем, вы просто вызываете метод на объекте и позволяете объекту (включая его иерархию классов) решать, какую реализацию следует вызывать. Вы обычно использовали бы только третью форму (с super) из метода, чтобы явно вызвать версию суперкласса того же метода.

+0

Но когда вы переопределили метод и хотите вызвать супер как часть переопределенного метода, * then * вы должны использовать второй синтаксис? – Aerovistae

+0

@Aerovistae: Нет, в этом случае вы должны использовать 'super'. – BrenBarn

+0

Я часто читал, что super() лучше всего сохраняется для случаев, когда задействовано множественное наследование. – Aerovistae

Смежные вопросы