2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Наследование (super) в python 2.7
Сообщение15.09.2018, 09:38 
Аватара пользователя


27/03/14
1091
Здравствуйте, изучаю ООП в python 2.7. Не могу понять, что не так в этом коде:

Используется синтаксис Python
class Person():
    def __init__(self, name):
        self.name = name

class EmailPerson(Person):
    def __init__(self, name, email):
        super(EmailPerson, self).__init__(name)
        self.email = email

bob = EmailPerson('Bob', 'bob@gmail.com')
 

Класс EmalPerson - наследник класса Person. Он наследует из Person все то, что делает там метод __init__, кроме того, его __init__ содержит атрибут email. Синтаксис слова super() вроде как правильный: имя класса, который наследует, ссылка на объект (self), после чего метод класса Person, который наследуется. Что не так? Выдает ошибку:
Код:
TypeError: super() argument 1 must be type, not classobj

Но ведь EmailPerson - это не объект, а класс. В чем претензия?

 Профиль  
                  
 
 Re: Наследование (super) в python 2.7
Сообщение15.09.2018, 10:32 
Заслуженный участник


28/04/09
1933
Этот код проглатывает Python 3.x, но Python 2.7 его не переваривает. Причина в том, что синтаксис т.н. new-style classes в Python 2.7 требует явного указания того, что класс наследуется от типа object: class Person(object), в то время как в Python 3.x это требование было ослаблено (поскольку т.н. old-style classes были из него удалены), и можно написать просто class Person() (при этом по умолчанию будет считаться, что класс унаследован от object).

 Профиль  
                  
 
 Re: Наследование (super) в python 2.7
Сообщение15.09.2018, 11:37 
Аватара пользователя


27/03/14
1091
EtCetera, спасибо большое, я понял. А что, в определении родительского класс в скобках кроме object может быть другое какое-то слово? В чем смысл этого?

 Профиль  
                  
 
 Re: Наследование (super) в python 2.7
Сообщение15.09.2018, 16:28 


14/09/18
15
В Python 3.6 можно использовать super и без аргументов. В 2.7 не пробовал, но Вы можете попробовать.

 Профиль  
                  
 
 Re: Наследование (super) в python 2.7
Сообщение15.09.2018, 17:03 
Аватара пользователя


27/03/14
1091
leon_ard в сообщении #1339174 писал(а):
В Python 3.6 можно использовать super и без аргументов. В 2.7 не пробовал, но Вы можете попробовать.

В версии 2.7 так делать нельзя.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group