Ruby类实例与继承

Ruby类实例与继承,ruby,inheritance,Ruby,Inheritance,我想创建一个子类,在超类之外为子类添加属性。这就是我尝试过的: 第一版: 班级人员 属性读取器:名字、姓氏、年龄 def初始化(名字、姓氏、年龄) @first_name=first_name @姓氏=姓氏 @年龄=年龄 结束 结束 班级音乐人 属性读取器:名字、姓氏、年龄、仪器 def初始化(名字、姓氏、年龄、仪器) 超级的 @仪器 结束 结束 第二版 班级人员 ATTRS=[‘姓’、‘姓’、‘年龄’] def属性 属性 结束 结束 班级音乐人 属性=[“仪器”] def属性 超级+属性

我想创建一个子类,在超类之外为子类添加属性。这就是我尝试过的:

第一版:
班级人员
属性读取器:名字、姓氏、年龄
def初始化(名字、姓氏、年龄)
@first_name=first_name
@姓氏=姓氏
@年龄=年龄
结束
结束
班级音乐人
属性读取器:名字、姓氏、年龄、仪器
def初始化(名字、姓氏、年龄、仪器)
超级的
@仪器
结束
结束

第二版
班级人员
ATTRS=[‘姓’、‘姓’、‘年龄’]
def属性
属性
结束
结束
班级音乐人
属性=[“仪器”]
def属性
超级+属性
结束
结束

这两种方法都不管用

在版本1中尝试

class Musician < Person
  attr_reader :instrument
  def initialize(first_name, last_name, age, instrument)
     # Pass arguments to the super class' constructor!
     super first_name, last_name, age
     @instrument = instrument
  end
end
class音乐家

多亏了
attr\u reader:first\u name、:last\u name、:age
in
Person
music
中的这三个访问器将因继承而可用。

将来,您能给出错误消息,而不是说“它不起作用”吗?
class Person
    ATTRS = ['first_name', 'last_name', 'age']
    def attributes
        ATTRS
    end
end

class Musician < Person
    ATTRS = ['instrument']
    def attributes
        super + ATTRS
    end
end
class Musician < Person
  attr_reader :instrument
  def initialize(first_name, last_name, age, instrument)
     # Pass arguments to the super class' constructor!
     super first_name, last_name, age
     @instrument = instrument
  end
end