Python имеет представление о метаклассах, которые, если я правильно понимаю, позволяют вам модифицировать объект класса в момент построения. Вы не изменяете класс, а вместо этого объект, который должен быть создан, инициализируется.
Python (по крайней мере, по состоянию на 3.0, я считаю) также имеет идею декораторов класса. Опять же, если я правильно понимаю, декораторы классов допускают модификацию определения класса в момент его объявления.
Теперь я считаю, что в Ruby есть декоративная функция или функция, эквивалентная функции, но в настоящее время я не знаю о чем-то эквивалентном метаклассам. Я уверен, что вы можете легко прокачать любой объект Ruby с помощью некоторых функций и делать то, что хотите, но есть ли функция на языке, который устанавливает это как метаклассы?
Итак, имеет ли Ruby нечто похожее на метаклассы Python?
Изменить. Я был отключен в метаклассах для Python. Метаклас и декоратор класса делают очень похожие вещи, которые появляются. Они изменяют класс, когда он определяется, но по-разному. Надеюсь, гуру Python придет и лучше объяснит эти функции в Python.
Но класс или родительский класс могут реализовать функцию __new__(cls[,..])
, которая настраивает конструкцию объекта до его инициализации с помощью __init__(self[,..])
.
Изменить Этот вопрос в основном предназначен для обсуждения и изучения того, как эти два языка сравниваются в этих функциях. Я знаком с Python, но не с Ruby, и мне было любопытно. Надеюсь, кто-нибудь, у кого есть тот же вопрос о двух языках, найдет это сообщение полезным и просвещенным.