Подтвердить что ты не робот

Наследовать метод initialize() в ruby?

Я до сих пор не могу понять, как создать конструктор подкласса, следуя за его родителем...
Пример:

require 'mechanize'

class Scraper
    attr_accessor :agent

    def initialize 
    # I dont know if using instance variable is the right thing to do
    @agent = Mechanize.new 
    end
end

class ScraperA < Scraper
end

Я хочу, чтобы ScraperA выполнял поведение родительского конструктора,
то есть создать экземпляр объекта Mechanize без переименования Mechanize.new в Метод scraperA initialize(). Возможно ли это?

Просто хочу следовать принципу DRY, но рубин мне тяжело?
Надеюсь, что это не просто мое невежество. В ожидании простого решения, Tnx.

Изменить:
оказывается, что у меня был пустой метод initialize() в ScraperA, который переопределяет значение по умолчанию инициализации(). Итак, да, пример работает, потому что там нет пустого метода инициализации. Извините за мою глупость. Tnx.

4b9b3361

Ответ 1

Умм... а? Да, это так... Проверьте это:

class A
  def initialize
    @a = "foo"
  end
end

class B < A
  def to_s
    @a
  end
end

puts B.new
# "foo" is printed

Это работает, потому что initialize наследуется, как и любой другой метод. Если вы переопределите его, получив новый sub initialize, он перестанет работать. Затем вы можете явно использовать super для вызова родительского initialize.

Ответ 2

Это должно работать...

class ScraperA < Scraper

  def initialize
    super

    # do other stuff here if necessary
  end

end

... если вы хотите иметь другую логику для подкласса. Как говорится в комментариях, если конструктор точно такой же, как для родительского класса, ваш исходный код должен работать нормально.