т. (383) 381-86-26

Блог о создании вебсайтов

 

Метаклассы в Python. Истоки.

 

 

Уже знаете, что такое метаклассы в Python? Теперь прочитайте о том, как они появились в языке! Рассказывает сам Python BDFL Guido van Rossum! Дадим ему слово:

Перевод. Оригинал тут.

Последнее время стали появляться разные спекуляции на тему истоков появления металкассов в Python. Очень часто звучат заявления, что они был взяты из Ruby. Нет, они не были позаимствованы из этого языка. Я чувствую, что следует расставить точки над "i".

Метаклассы не были позаимствованы из Ruby.

Я не был вдохновлен Ruby в то время (да и вообще никогда не был). Создатель Ruby (и это факт) сам вдохновлялся Python при создании Ruby. Mats как-то рассказал мне, что при создании языка он вдохновлялся Perl и Python (80% Perl и 20% Python). А также, что Ларри Пэйдж его герой.

Я писал о метаклассах в Python ещё в 1998 году: http://www.python.org/doc/essays/metaclasses/. Кстати, в этом же эссе есть полная спецификация реализации типа данных enum, которая имеет много общего с их реализацией в PEP 435

"New-style" классы — это уже вторая итерация реализации идеи метаклассов в Python. На внедрение "new-style" классов меня вдохновила книга "Putting Metaclasses to Work" (Ira Forman, Scott Danforth)

Однако даже оригинальная архитектура Python 1991 года указывала на то, что type — объект. Указатель типа объекта (type pointer) всегда был указателем на специальный объект, которых хранил специфичные данные: пачку указателей на С-функции, которые реализовывали поведение разных объектов. Все это очень похоже на vtable в С++.

Тип самого объекта type всегда был объектом специального типа, который, если хотите, можно назвать мета-типом.

В то время я был очень слабо знаком со Small Talk. Я помню то удивление, которое испытал от того как там используются метаклассы (там это делается совсем иначе, чем в python или ruby), когда прочитал об этом много позже. Хотя использование байткода в Small Talk оказало значительное влияние на байткод в Python. Кажется я читал об это в книге "Smalltalk-80: The Language and its Implementation".

Следите за нашими публикациями и вы узнаете ещё больше о мистических возможностях Python, его особенностях и интересных трюках, которые сделают из вас могущественного мага программирования на языке Python! =)

Подпишитесь на рассылку, будет интересно!