Кто-либо использует метаметаклассы / meta-meta-meta-classes в Python / другие языки?

int&& xref = 5;

... создает временную инициализацию с 5, время жизни которой увеличивается до конца блока.

Назначение

xref = 10;

изменяет значение все еще живого временного.

14
задан Mike A 24 January 2009 в 20:10
поделиться

4 ответа

Система классов в Smalltalk является интересной для изучения. В Smalltalk все - объект, и каждый объект имеет класс. Это не подразумевает, что иерархия переходит к бесконечности. Если я помню правильно, это идет что-то как:

5-> Целое число-> Целочисленный класс-> Метакласс-> класс Метакласса-> Метакласс->... (это циклично выполняется)

, Где '->' обозначает, "является экземпляром".

4
ответ дан 1 December 2019 в 07:06
поделиться

Это напоминает мне о вечных поисках, некоторые люди, кажется, идут для создания "универсальной реализации шаблона". Как фабрика, которая может создать любой объект ( включая другую фабрику ), или платформа внедрения зависимости общего назначения, которая намного более сложна для управления, чем просто написание кода, которое на самом деле делает что-то.

я должен был иметь дело с людьми намерение абстракции на грани самокопания, когда я управлял проектом Платформы Зенда. Я выключил набор предложений создать компоненты, которые ничего не сделали, они были просто волшебными реализациями шаблонов GoF, как будто шаблон был целью сам по себе вместо средства для цели.

существует точка убывающей доходности для абстракции. Некоторая абстракция является большой, но в конечном счете необходимо написать код, который делает что-то полезное.

Иначе это всего черепахи полностью вниз .

18
ответ дан 1 December 2019 в 07:06
поделиться

Отвечать на Ваш вопрос: нет.

Не стесняются исследовать его далее.

Примечание, однако, что Вы объединили шаблоны разработки (которые являются просто идеями) с кодом (который является реализацией.)

Хороший код часто отражает много взаимосвязанных шаблонов разработки. Нет никакого простого способа к, формализуют это. Лучшим, которое можно сделать, является хорошее изображение, правильно написанные docstrings и имена методов, которые отражают различные шаблоны разработки.

Также примечание, что метакласс является классом. Это - цикл. Нет никакого более высокого уровня абстракций. В той точке это просто полно решимости. Идея метаметакласса не означает много - это - метакласс для метаклассов, который глуп, но технически возможен. Это - все просто класс, как бы то ни было.

<час>

Редактирование

"Является классами, которые создают метаклассы, действительно настолько глупые? Как их утилита внезапно заканчивается?"

класс А, который создает класс, прекрасен. Это - в значительной степени это. То, что целевой класс является метаклассом или абстрактным суперклассом или реальным классом, не имеет значения. Метаклассы делают классы. Они могли бы сделать другие метаклассы, который является странным, но они - все еще просто метаклассы, делающие классы.

утилита "внезапно" заканчивается, потому что нет никакой фактической вещи, в которой Вы нуждаетесь (или может даже записать) в метаклассе, который делает другой метакласс. Не случается так, что это "внезапно" становится глупым. Это - это там нет ничего полезного.

, Поскольку я отбираю, не стесняйтесь исследовать его. Например, на самом деле запишите метакласс, который создает другой метакласс. Весело провести время. Там могло бы быть что-то полезное.

точка OO должна записать определениям классов ту модель реальные объекты. По сути, метакласс иногда удобен для определения сквозных аспектов нескольких связанных классов. (Это - способ сделать некоторое Аспектно-ориентированное программирование.) Это - весь, метакласс может действительно сделать; это - место для содержания нескольких функций, как __new__(), которые не являются надлежащими частями самого класса.

7
ответ дан 1 December 2019 в 07:06
поделиться

Во время истории конференции языков программирования в 2007 году Симон Пейтон Джонс прокомментировал, что Haskell позволяет Meta Programming с использованием классов типа, но это действительно чередуется вплоть. Вы можете Meta-Meta-Meta Etc программы в Haskell, но о том, что он никогда не слышал ни о ком запрограммированных более 3 уровней косвенности.

Парень Стил указывал, что это то же самое в Lisp и схеме. Вы можете сделать мета-программирование, используя BackTicks и Evals (вы можете думать о Backtick, как Python Lambda, keya), но он никогда не видел более 3 б / у.

Предположительно, они видели больше кода, чем у вас или я когда-либо имел, поэтому его лишь незначительное преувеличение, чтобы сказать, что никто никогда не ушел за 3 уровня мета.

Если вы думаете об этом, большинство людей никогда не используют мета-программирование, и два уровня довольно трудно обернуть голову. Я догадаюсь, что три почти невозможны, и тот последний парень, чтобы попробовать четыре в убежище.

7
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: