Это является правильным.
Как сказал Гарет, переменные экземпляра принадлежат экземплярам, а не классам.
Если вы хотите, чтобы переменные принадлежали классам, вы можете использовать переменная экземпляра объекта класса (ошибочно, этот термин сложный, чтобы написать его правильно).
Короче говоря, все в Ruby является объектом, включая классы.В следующем примере Base и Derivative являются просто константами, которые содержат ссылку на объекты.Эти объекты представляют классы (та-да!).
С учетом этого факта мы можем сделать следующее:
class Base
@var = 1
def self.change(new_value)
@var = new_value
end
def self.to_s
"#{self.name}, @var = #{@var}"
end
end
class Derivative < Base; end
Derivative.change(2)
puts Base # => Base, @var = 1
puts Derivative # => Derivative, @var = 2