Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2010 14:17:07

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

super()

Проясните, пожалуйста. Есть класс ConnectionObject, унаследованный от класса Connection.

class ConnectionObject(Connection):
def authenticateWithPassword(self):
super(ConnectionObject, self).authenticateWithPassword(self.username, self.password)

def __init__(self, username, password):
super(ConnectionObject, self).__init__()
self.username = username
self.password = password
У родительского класса Connection есть метод authenticateWithPassword(self, username, password). Следующий код
con = ConnectionObject(username, password)
con.authenticateWithPassword()
дает следующую ошибку
File “D:\developing\ide\projects\netbeans\jython\SshTest\src\sshhelper.py”, line 45, in get_connection
con.authenticateWithPassword()
File “D:\developing\ide\projects\netbeans\jython\SshTest\src\sshhelper.py”, line 16, in authenticateWithPassword
super(ConnectionObject, self).authenticateWithPassword(self.username, self.password)
TypeError: authenticateWithPassword() takes exactly 1 argument (3 given)
Т.е. такое впечатление, что ConnectionObject вызовом super(ConnectionObject, self).authenticateWithPassword(self.username, self.password) обращается к самому себе. Если заменить эту строку на
Connection.authenticateWithPassword(self, self.username, self.password)
то работает. Почему не работает в первом случае и как правильнее?



Офлайн

#2 Ноя. 28, 2010 14:28:42

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

super()

Кажется нашел.

http://fuhm.net/super-harmful/

Это ужасно :)



Офлайн

#3 Ноя. 28, 2010 15:16:29

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

super()

Это ужасно - при наследовании перекрывать виртуальные функции другими, с измененной сигнатурой



Офлайн

#4 Ноя. 28, 2010 15:25:29

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

super()

Да, пожалуй :) Заведу другой метод.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version