Python与Ruby类方法

时间:2016-04-02 17:53:04

标签: python ruby

以下两个Ruby和Python代码是类方法的示例。为什么python允许通过对象访问类方法,但ruby没有?

Python代码

class student:
    b = 78

    @classmethod
    def foo(var):
        return var.b

z = student()
print z.foo()    # => 78

Ruby Code

class Student
  @@b = 78

  def self.foo
    @@b
  end
end

z = Student.new
puts z.foo    # => -e:20:in `<main>': undefined method `foo' for #<Student:0x007ff4f98ab9e8> (NoMethodError)

3 个答案:

答案 0 :(得分:0)

来自Ruby doc Object#display

  

display(port=$>)

     

在给定端口上打印obj(默认为$>)。相当于:

 def display(port=$>)
   port.write self
 end

所以它只显示接收器,它是一个Student实例。我不知道这与课堂方法有什么关系。

实际上可以调用类方法Student.display

z.class.display

答案 1 :(得分:0)

你的问题的红宝石方面的答案:Ruby允许通过对象通过对象访问类方法:

class Student
  @@b = 78

  def self.foo
    @@b
  end
end

z = Student.new
puts z.class.foo 

z.class返回对象的类(在本例中为Student)。

class Student
end
z = Student.new
puts z.class        #Student
puts z.class.class  #Class

答案 2 :(得分:0)

Ruby没有类方法,只有实例方法。在您的情况下,fooStudent的单例类的实例方法。

一旦你理解Ruby中没有类方法这样的东西,只有实例方法,那么为什么在一个完全不同的实例上调用一个实例是不可行的,这一点应该是显而易见的。