Аналог протокола дескриптора Python на других языках?

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
10
0
848
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Ruby и C# позволяют легко создавать средства доступа, указывая методы получения и установки для атрибута, как в Python. Однако это не предназначено для того, чтобы, естественно, вы могли писать код для этих методов в другом классе так, как это позволяет Python. На практике я не уверен, насколько это важно, поскольку каждый раз, когда я видел атрибут, определенный через протокол дескриптора, он был реализован в том же классе.

Обновлено: Проклятье мою дислексию (я имею в виду небрежное чтение). По какой-то причине я всегда читал «дескриптор» как «декоратор» и наоборот, даже когда я печатаю их обоих. Я оставлю свой пост нетронутым, поскольку он содержит достоверную информацию, хотя и не имеет абсолютно никакого отношения к вопросу.

Сам термин «декоратор» на самом деле является названием паттерна проектирования, описанного в знаменитой книге «Паттерны проектирования». В статье Википедии много примеров использования декораторов на разных языках программирования: http://en.wikipedia.org/wiki/Decorator_pattern

Однако декораторы в этой статье объектно-ориентированы; у них есть классы, реализующие предопределенный интерфейс, который позволяет другому существующему классу вести себя как-то иначе, и т. д. Декораторы Python действуют функционально, заменяя функцию во время выполнения другой функцией, что позволяет вам эффективно изменять / заменять эту функцию, вставлять код и т. д.

В мире Java это известно как аспектно-ориентированное программирование, и компилятор Java AspectJ позволяет делать такие вещи и компилировать код AspectJ (который является надмножеством Java) в байт-код Java.

Я недостаточно знаком с C# или Ruby, чтобы знать, какой у них будет версия декораторов.

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

cdleary 29.08.2008 23:11

Другие вопросы по теме