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






Я тоже не слышал о прямом эквиваленте. Вероятно, вы могли бы добиться того же эффекта с помощью макросов, особенно на таком языке, как Lisp, который имеет чрезвычайно мощные макросы.
Я не удивлюсь, если другие языки начнут включать что-то подобное, потому что это настолько мощно.
Ruby и C# позволяют легко создавать средства доступа, указывая методы получения и установки для атрибута, как в Python. Однако это не предназначено для того, чтобы, естественно, вы могли писать код для этих методов в другом классе так, как это позволяет Python. На практике я не уверен, насколько это важно, поскольку каждый раз, когда я видел атрибут, определенный через протокол дескриптора, он был реализован в том же классе.
Обновлено: Проклятье мою дислексию (я имею в виду небрежное чтение). По какой-то причине я всегда читал «дескриптор» как «декоратор» и наоборот, даже когда я печатаю их обоих. Я оставлю свой пост нетронутым, поскольку он содержит достоверную информацию, хотя и не имеет абсолютно никакого отношения к вопросу.
Сам термин «декоратор» на самом деле является названием паттерна проектирования, описанного в знаменитой книге «Паттерны проектирования». В статье Википедии много примеров использования декораторов на разных языках программирования: http://en.wikipedia.org/wiki/Decorator_pattern
Однако декораторы в этой статье объектно-ориентированы; у них есть классы, реализующие предопределенный интерфейс, который позволяет другому существующему классу вести себя как-то иначе, и т. д. Декораторы Python действуют функционально, заменяя функцию во время выполнения другой функцией, что позволяет вам эффективно изменять / заменять эту функцию, вставлять код и т. д.
В мире Java это известно как аспектно-ориентированное программирование, и компилятор Java AspectJ позволяет делать такие вещи и компилировать код AspectJ (который является надмножеством Java) в байт-код Java.
Я недостаточно знаком с C# или Ruby, чтобы знать, какой у них будет версия декораторов.
протокол дескриптора - это не то же самое, что шаблон декоратора в Python - я имею в виду возможность сделать экземпляр объекта в атрибуте другого объекта, который "проксируется" динамически.