Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2011 14:54:30

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

super()

Разбираюсь в diamond diagram и функции super(). Выполняю пример:

class A:
def __init__(self):
print "A"


class B(A):
def __init__(self):
print "B"
super(B, self).__init__()


class C(A):
def __init__(self):
print "C"
super(C, self).__init__()


class D(B, C):
def __init__(self):
print "D"
super(D, self).__init__()
Импортирую и создаю объект класса. Интерпрететор выдает ошибку:
TypeError: super() argument 1 must be type, not classobj
Поясните пожалуйста, что присходит? Прочтение документации функции super() не привело к полной ясности вопроса.



Отредактировано (Апрель 10, 2011 14:57:48)

Офлайн

#2 Апрель 10, 2011 15:01:24

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

super()

Потому что super работает только для классов нового стиля, то есть тех, которые наследуются от object.

class A(object):
pass
В вашем случае надо делать так:
class A:
def __init__(self):
print "A"

class B(A):
def __init__(self):
print "B"
B.__init__(self)



Офлайн

#3 Апрель 10, 2011 15:14:16

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

super()

Получается super() тут вообще не при чем? Изначально задача была разобраться в super(), помогите пож. простым примером с использованием super().



Офлайн

#4 Апрель 10, 2011 16:59:00

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

super()

Наследуйте ваш класс A от object, как показал regall.



Офлайн

#5 Апрель 10, 2011 17:11:52

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

super()

Ок, понял.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version