如何在继承class中自动声明Class实例变量

How to declare Class Instance Variable in inherited class automatically

我在 Ruby 中使用 Class 继承变量来跟踪到目前为止我创建的实例数。为了让我的代码保持干燥,我在我的所有其他 classes 继承自的基础 class 中实现了大部分逻辑。

class Entity
  @instance_counter = 0

  class << self
    attr_accessor :instance_counter
  end

  def initialize
    self.class.instance_counter += 1
  end
end

除一件事外,这工作得很好:

我必须在每个 child class 中定义 @instance_counter ,否则我会得到一个 NoMethodError.

class Child < Entity
  @instance_counter = 0
end

有没有办法在每个 child 中自动声明变量,这样我就不必手动进行了?

我不知道这是否是最好的方法,但我可能会这样做:

class Entity
  singleton_class.send(:attr_writer, :instance_counter)
  def self.instance_counter; @instance_counter ||= 0; end
  def initialize
    self.class.instance_counter += 1
  end
end