to post messages and comments.

← All posts tagged Python

@OCTAGRAM:

putting.om.Environment.solveMetaclassConstraints
Нашёл ту функцию, которая подбирает нужный метакласс или конструирует новый, если ни один из запрошенных не подходит. На всё про всё 40 строк кода. Вот, насколько упростил Гвидо ван Россум свой Питон, отказавшись это сделать, и сломав метаклассы по сравнению с моделью из книги, которой он вдохновлялся.

The metaclasses book describes a mechanism whereby a suitable metaclass is automatically created, when necessary, through multiple inheritance from M1 and M2. In Python 2.2, I have chosen a simpler approach which raises an exception if the metaclass constraint is not satisfied; it is up to the programmer to provide a suitable metaclass through the __metaclass__ class variable. However, if one of the base metaclasses satisfies the constraint (including the explicitly given __metaclass__, if any), the first base metaclass found satisfying the constraint will be used as the metaclass.

@OCTAGRAM:

Unifying types and classes in Python 2.2
One of the coolest, but perhaps also one of the most unusual features of the new classes is the possibility to write "cooperative" classes. Cooperative classes are written with multiple inheritance in mind, using a pattern that I call a "cooperative super call". This is known in some other multiple-inheritance languages as "call-next-method", and is more powerful than the super call found in single-inheritance languages like Java or Smalltalk. C++ has neither form of super call, relying instead on an explicit mechanism similar to that used in classic Python. (The term "cooperative method" comes from "Putting Metaclasses to Work".)Таким образом, в этом отношении Питон продвинулся вперёд по сравнению с SOM. В реальном SOM множественное наследование было реализовано как в C++, топорно и без всяких порядков вызова методов. Соответственно, никакого call-next-method, а вместо этого указатель на унаследованную реализацию получался единоразово во время инициализации класса, либо потом можно было запросить его ещё раз, указав свой класс и индекс родительского класса. Эмиттеры все эти индексы заворачивали в соответствующие имена родительских классов. При этом во весь вставала проблема ромбовидных иерархий, когда к родительским классам вызовы могут либо не приезжать, либо приезжать несколько раз. Чтоб совсем плохо не было, конструкторы, деструкторы и операции присваивания в SOM пользовались битовыми полями (один класс — один бит), отсекающими повторные вызовы. Кооперативные методы, скорее всего, были только в книге. Metaclass Framework в составе SOM был закрытой библиотекой без IDL. Бетатестеры могли получить их по запросу. Так как всего этого нет, однозначно утверждать, что MRO не было, нельзя, но по крайней мере, в общем доступе кооперативных методов не было. До Питона они были только в книге.

The metaclasses book describes a mechanism whereby a suitable metaclass is automatically created, when necessary, through multiple inheritance from M1 and M2. In Python 2.2, I have chosen a simpler approach which raises an exception if the metaclass constraint is not satisfied; it is up to the programmer to provide a suitable metaclass through the __metaclass__ class variable. However, if one of the base metaclasses satisfies the constraint (including the explicitly given __metaclass__, if any), the first base metaclass found satisfying the constraint will be used as the metaclass.А вот тут, к сожалению, сделан шаг назад к семантике CLOS. В SOM 2.0 это было, и, конечно, это было в книге. Возможно, что (кроме длительной недоступности книги, пока я её не отсканил) это причина, почему метаклассы в Питоне не столь развиты. Ведь с таким геморроем ими резко становится не так удобно пользоваться.

@OCTAGRAM:

octagram.name

24 апреля 2007 года некто Guido van Rossum оставил комментарий к книге «Putting Metaclasses to Work»:

Too bad this is out of print; I keep referring to it as the best tutorial I know for the difficult subject of cooperative multiple inheritance, supported by Python via the super() function.
amazon.com

Книга изначально стоила $39.95. Б/у книги обычно дешевеют, но эту книгу я был счастлив найти б/у за $51, потому что цена на б/у обычно не меньше $80. По моему мнению, если б/у книга дороже новой, когда новая была в печати, это признак, что надо допечатывать новые тиражи. При всём при этом книгу так и не удалось найти в p2p. С книгой, наконец, случилось то, что и должно было. Она отсканирована (первая ссылка), но ничего, кроме этого пока не сделано, и когда будет сделано, не знаю. Я вообще раньше никогда не переводил книги в цифру.

Размеров бояться не надо. Если обложка весит в цвете 23Мб, то типичная страница в оттенках серого получается на 2-4, редко 6Мб. В сумме 1Гб. Разрешение 400dpi. К книге по–хорошему должен был прилагаться CD-ROM или Floppy, но кто–то очень умный решил вместо этого разместить вложение в Интернете. Вложение упомянуто, например, на странице xiii (временный адрес octagram.name ). Как это обычно бывает в таких случаях, фиг там уже что скачаешь. awl.com теперь перенаправляет на сайт нового владельца: informit.com

На сайте написано «Register your product to gain access to bonus material or receive a coupon.», но ничего там в личном кабинете, конечно, не появилось после регистрации, а техподдержка пишет:

Dear Ivan,

If you have registered the textbook but are unable to locate the desired resources, then those resources may no longer exist.

Because this book is 16 years old and out of print since 2001, many of its resources are no longer supported and available online.

We apologize for any difficulty or inconvenience this has caused you.

Основательно поколдовав с Internet Wayback Machine, файлик получилось найти и сохранить: octagram.name

@OCTAGRAM:

Apple Wiki Server написан на Twisted, Python