Нет, вы не можете сделать это в Ruby . В Ruby объектная модель встроена в языковую спецификацию и недоступна (и, конечно, не модифицируемая ) из программы. Даже в Rubinius , который является реализацией Ruby, написанной в основном на Ruby, и с удивительными возможностями метапрограммирования, которые выходят далеко за рамки того, что предлагает спецификация Ruby, некоторые из фундаментальных примитивов встроены в C ++ .
Я не очень хорошо знаком с Python , но я уверен, что так же, даже в PyPy .
Вы могли бы сделать это в Smalltalk , изменив (или подклассифицировав) класс Behavior
, который является суперклассом Class
и определяет поведение как классов, так и метаклассов.
Вы можете , конечно, сделать это в CLOS или, точнее, используя MOP CLOS ( Meta-Object Protocol ). В конце концов, это то, для чего предназначен MOP: определение объектной модели.
Самая близкая концепция ОО к тому, что вы описываете, это концепция Классов Предикатов . Класс предикатов - это класс, экземпляры которого определяются не статически, а набором предикатов: все объекты, которые удовлетворяют набору предикатов, являются экземплярами класса, как только и так долго, пока держится предикат. В языке с изменяемым состоянием это, очевидно, означает, что объекты могут «входить» и выходить из классов предикатов при изменении их состояния. Это также означает, что в любой момент времени объект может быть экземпляром множества классов предикатов или вообще не иметь их.
Единственный основной язык (для довольно широкого определения «основного потока»), о котором я знаю, имеет классы предикатов: Коэффициент .
Однако обратите внимание, что даже здесь предикаты определены, и объект либо выполняет их, либо не выполняет. Не существует концепции определения того, выполняет ли объект предикат во время выполнения.
Вас также может заинтересовать идея Clojure специальная таксономия .
Наконец, но не в последнюю очередь, вы можете взглянуть на Mikel Evins объектную систему под названием Categories . Лучшее описание категорий - просто следить за записями блога в хронологическом порядке:
- Протоколы
- Категория
- Взгляд на категории
- Нет королей в Риме
- Вверх появляется разумное факсимиле
- Различные категории категорий
- Категории Ошибки
- Плоская кошка в чане C3
- Категории 0,2
- Бард
- Бардовские тонкости
В будущем большая часть разработки категорий будет выполняться на новом языке Микеля Бард , и вы можете следить за их развитием, следуя тегам категорий и тег Барда на Новый блог Микеля .
Однако в целом я бы сказал, что тот факт, что в управлении знаниями и объектно-ориентированном использовании используется слово class , является в основном исторической случайностью. Я не думаю, что моделирование одного с другим хорошо подходит.