Mikhail Gusarov wrote: > Twas brillig at 09:52:03 22.03.2009 UTC+02 when [email protected] did > gyre and gimble: > SS> Какие проблемы создала бы возможность указывать тип параметров > SS> допустим в питоне (есть такой проект)? > > Простой пример: в разных библиотеках для питона есть специализированные > типы, притворяющиеся строками для всех практических нужд, но > реализованные по-другому (кэширование, внутренние преобразования, > дополнительная функциональность).
Ага, duck typing. Если кто-то ходит как утка, крякает как утка и выглядит как утка, то будем считать его уткой. > Для получения эквивалентной функциональности потребовалось бы ввести > новое понятие: контракт, выражающийся не в типе, а в наборе свойств, > которым требуется удовлетворять. Не считая той досадной вещи, что > проверка контракта невычислима, всё хорошо. Думаю, это решаемо. Даже в статически типизированной жаве это решили с помошью интерфейсов, а питоне можно и duck-интерфейсы определять в подавляющем большинстве случаев. Удовлетворять контракт не наследованием от определённых классов/интерфейсов (не только этим), а наличием определённого множества методов (с совместимыми сигнатурами). Сложность только в том, что питон слишком динамический, есть возможность самому обрабатывать вызов метода и значит список методов объекта до вызова может быть неизвестен. Но этим не злоупотребляют и в редких случаях можно придумать какой-нибудь компромисс. Например игнорировать ограничение типа. Хуже не будет. Тормозит работу тут думаю только большой объём работы по проверке стандартной библиотеки (и популярных нестандартных) на полноту поддержки контрактов. Если что-то притворяется строкой, то хотелось бы, чтобы притворялось хорошо, чтобы и выделение подстроки работало, и преобразование регистра, и т.п. Сейчас не так и вылезающие в рантайме проблемы прячут под ковёр явным преобразованием к строке. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

