"Ruby和Python版本中的self有什么区别?"

2024-06-13 15:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

乍一看很明显:
Self不是Python中的关键字,但不管您如何称呼它,它都有一个“Self-like”值。
Python方法将self作为显式参数接收,而Ruby则不接受。
Ruby有时会显式地将方法定义为自用点表示法的一部分。在

最初的谷歌搜索结果
http://rubylearning.com/satishtalim/ruby_self.html
http://www.ibiblio.org/g2swap/byteofpython/read/self.html


Tags: 方法selfcom语言http参数定义html
3条回答

self仅作为惯例使用,您可以使用spam、bacon或香肠代替self并获得相同的结果。这只是传递给绑定方法的第一个参数。但要坚持使用self,因为它会混淆其他人和一些编辑。在

尽管webmat声称,显式self的Guido wrote不是“实现黑客——它是一种语义设备”。在

The reason for explicit self in method definition signatures is semantic consistency. If you write

class C: def foo(self, x, y): ...

This really is the same as writing

class C: pass

def foo(self, x, y): ... C.foo = foo

这是一个有意的设计决定,而不是后来引入OO行为的结果。在

Python中的一切都是一个对象,包括文字。在

另请参见Why must 'self' be used explicitly in method definitions and calls?

Python的设计不仅仅是支持面向对象的编程。在方法和函数之间保持相同的接口可以使这两种样式更清晰地进行互操作。在

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”定义了一个实例方法自我xxx'定义类方法。在

^{pr2}$

相关问题 更多 >