Вы определите ATTRIBUTES в Base как хэш, связывающий имя класса с атрибутами и будете использовать унаследованный метод для Class.
class Base
ATTRIBUTES = {
"ChildNameAge" => [:name, :age],
"ChildHeightWidth" => [:height, :width]
}
def self.inherited(child)
return unless (attributes = ATTRIBUTES[child.name])
child.class_eval { attr_accessor *attributes }
end
end
Таким образом, когда вы создадите свой дочерний класс, он будет определен напрямую. Но, как говорили другие, это не очень хорошая идея (даже если это возможно). Вы не можете документировать свои атрибуты (используя автоматический документ, например, YARD), и когда вы читаете реализацию Child, вы не видите точно, где определены атрибуты (что может привести к неправильному пониманию классов.)