python - “self”的 Ruby 和 Python 版本有什么区别?

标签 python ruby language-features

我学过一些 Python,但现在才开始使用 Ruby
我可以很好地解释这两种语言中“ self ”之间的区别。

乍一看很明显:
self在Python中不是关键字,但是无论怎么称呼都有一个“self-like”的值。
Python 方法将 self 作为显式参数接收,而 Ruby 则不会。
Ruby 有时使用点表示法将方法明确定义为 self 的一部分。

初步谷歌搜索显示
http://rubylearning.com/satishtalim/ruby_self.html
http://www.ibiblio.org/g2swap/byteofpython/read/self.html

最佳答案

Python 的设计不仅仅支持面向对象的编程。在方法和函数之间保留相同的接口(interface)可以让这两种风格更干净地互操作。

Ruby 是从头开始构建的,是面向对象的。甚至文字也是对象(评估 1.class 并获得 Fixnum)。该语言的构建使得 self 成为保留关键字,无论您身在何处,它都会返回当前实例。

如果您在某个类的实例方法中,则 self 是对所述实例的引用。

如果你在类本身的定义中(而不是在方法中),self 就是类本身:

class C
  puts "I am a #{self}"
  def instance_method
    puts 'instance_method'
  end
  def self.class_method
    puts 'class_method'
  end
end

在类定义时,将打印“我是 C”。

直接的“def”定义了一个实例方法,而“def self.xxx”定义了一个类方法。

c=C.new

c.instance_method
#=> instance_method
C.class_method
#=> class_method

关于python - “self”的 Ruby 和 Python 版本有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/159990/

相关文章:

ruby - Ruby 中奇怪的局部变量行为

c# - 变量 : a Type or a keyword

python - 如果在 Ruby 和 Python 中都允许猴子修补,为什么在 Ruby 中争议更大?

python - 用它自己的结果提供 celery 队列

python - 如何在 Volttron 中使用 RPC

css - Github Pages jekyll 在使用自定义域时不加载 CSS

ruby - 将要传递给方法的数组数组分隔为多个对象

python - 如何在 Sqlalchemy 中正确使用 SQL 连接/子查询

python - 从主机字符串中删除最后一个句点

sharepoint-2010 - 创建后如何更改站点的默认语言 (sharepoint 2010)?