0

在 python 中,我可以这样做:

# say.py
class Speaker:
    def speak(self,word):
        pass
    def Do(self):
        self.speak("hello")
Speaker().Do()

如果我运行它,它根本不会做任何事情。我可以在另一个模块中做到这一点:

import say
class Test(say.Speaker):
    def speak(self,word):
        print(word)
Test().Do()

如果我运行它,原始speak函数 insay.py将被完全覆盖,因为我继承了它:

class Test(say.Speaker)

所以当我运行脚本时,它会打印这个词而不是什么都不做。我希望脚本的名称能够动态更改文件名,而无需编辑say.rb.

如果我跑了say.py并且做了:

Speaker().do()

什么都没有发生,但是当我运行另一个 py 模块并让它执行时:

Test.Do()

因为我继承了它,所以它被覆盖了,并且改变了speak. Speaker().Do()照原样做没有任何作用,但如果我这样做,Test.Do()它确实会因为覆盖而起作用。

它们是我在 python 中所做的红宝石等价物吗?如果是,我该怎么做?

4

2 回答 2

2

它非常相似。这是'say.rb':

module Say
  class Speaker 
    def speak(word) end
    def Do() speak("Hello") end
  end
end 

在您的其他模块中:

require 'say'
class Test < Say::Speaker
  def speak(word)
    puts(word)
  end  
end

展示:

Test.new.Do
于 2013-10-17T01:43:51.680 回答
1

当然有。你试过什么没用?阅读Ruby 中的继承

您实际上只需要更改该 Python 中的几个字符即可使其在 Ruby 中工作。

于 2013-10-17T01:21:42.190 回答