Techioz Blog

クラス宣言後にクラス継承を設定するか、const_set クラスでクラス継承を設定します

概要

クラスが以前に定義されている場合、親クラスから継承するようにするにはどうすればよいですか?

例えば:

class Parent
  ..
end

class Klass
  ..
end

次に、親から継承したいと思います。

クラス不一致エラーが発生するため、クラスを再度開いて設定することはできません。

class Klass < Parent
  ..
end

具体的には、Object.const_set を通じて作成しているクラスにクラス継承を設定する方法を調べようとしています。

klass = Object.const_set('Klass', Class.new)

Klass に Parent クラスから継承するように指示するにはどうすればよいですか?

解決策

既存のクラスのスーパークラスを変更する方法はありません。

動的に作成しているクラスのスーパークラスを指定するには、そのスーパークラスを引数として Class.new に渡すだけです。

class Parent
end
klass = Class.new(Parent)
klass.superclass #=> Parent

余談ですが、const_set を使用してクラスを作成しているわけではありません。 Class.new を使用して作成しています。作成したクラスを const_set を使用して定数に格納しているだけです。 const_set が呼び出されると、Class.new がすでに実行されており、スーパークラスを変更することはできません。