![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mkfs |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2010 Репутация: нет Всего: нет |
Как можно отделить реализацию класса от описания?
В С++ это делает так:
Как такое на python'е сделать? Только варианты типа:
Если надо иметь несколько реализаций разных классов в одном модуле, то придется переопределять __init__ для каждого конструктора. Некрасиво как-то... |
||||
|
|||||
cutwater |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Python это не С++. Запомните это. Так не нужно делать.
|
|||
|
||||
mkfs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2010 Репутация: нет Всего: нет |
|
|||
|
||||
cutwater |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Очевидно потому что в Python не существует необходимости и языковой возможности (как следствие из отсутствия такой необходимости) отделения реализации от описания. В С++ в первую очередь такое разделение было принято из-за особенностей реализации языка. Конкретно функция-член класса, как и просто функция должна быть в единственном экземпляре (кроме случаев inline и шаблонов). И уже после этого идет удобство чтения кода, как особенность такого подхода реализации. Добавлено через 2 минуты и 10 секунд P.S. Советую взглянуть на языки Java, C#, etc. В них тоже нет физической возможности разделения реализации от описания, так как в этом нет необходимости. Вам следует в первую очередь запомнить для себя что "Python - НЕ С++" и некоторые походы С++ программистов для Python не применимы. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Так не делают в языках хоть сколь нибудь поддерживающих модульность. В отличие от тех же C#, Java в Python есть настоящие модули, "содранные" ЕМНИП с Modula-3. В этих самых модулях описываются сущности: функции, классы, ... А интерфейс модуля описывать явно не надо. Эту задачу берёт на себе сам Python. Вообще, интерфейс может генерироваться компилятором (Oberon, Fortran), а может быть какая-нибудь поддержка в run-time через метаинформацию (в Python, видимо, как-то так)... По-разному бывает. Общая черта одна - явно описывать интерфейс модуля не надо. В случае Java/C# тоже самое справедливо только уже для классов, а не модулей. А в С/С++ модулей и поддержки модульности нет. Приходится изголяться. Никогда не тащите свои старые (и, кстати, в данном случае ещё и дурацкие) привычки в новый язык. -------------------- |
|||
|
||||
qweqwe |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
В с++, реализацию и объявление класса разделяют главным образом для ускорения компиляции. Второстепенно - сокрытие реализации, весьма условное, в срр файле.
В python-e можно использовать фабрику объектов вместо этого(не совсем тоже самое, но обычно это то, что требуется).
duck typing избавляет он необходимости применять наследование, достаточно создать несколько классов, имеющих один и тот же набор методов |
|||
|
||||
mkfs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2010 Репутация: нет Всего: нет |
Ясно. Спасибо за развернутые ответы.
|
|||
|
||||
Gunjy |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 16.5.2009 Репутация: нет Всего: нет |
Например через наследование - в классе B переопределяем метод класса A:
Если я вас правильно понял. |
||||
|
|||||
mkfs |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2010 Репутация: нет Всего: нет |
Я предполагал, что есть что-то типа:
Но эта штука из С++ в Питоне не нужна. |
||||
|
|||||
Dagger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 377 Регистрация: 4.9.2002 Где: Киев Репутация: 1 Всего: 8 |
обычно интерфейсы реализуют как базовые классы с методами, которые генерят исключение если их вызвать и они не имплеменчены в предках. Что-то типа:
|
|||
|
||||
Gunjy |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 16.5.2009 Репутация: нет Всего: нет |
Можно воспользоваться импортом:
|
||||||
|
|||||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |