tutorialspoint try online objects python ruby language-features

python - objects - try ruby online



¿Cuál es la diferencia entre las versiones de "sí mismo" de Ruby y Python? (4)

He hecho algo de Python, pero ahora estoy empezando a usar Ruby
Podría usar una buena explicación de la diferencia entre "yo" en estos dos idiomas.

Obvio a primera vista:
El yo no es una palabra clave en Python, pero hay un valor "similar a uno mismo" sin importar cómo lo llames.
Los métodos de Python reciben self como un argumento explícito, mientras que Ruby no.
A veces, Ruby tiene métodos explícitamente definidos como parte de la notación de punto usando sí mismo.

Inicial Google se revela
http://rubylearning.com/satishtalim/ruby_self.html
http://www.ibiblio.org/g2swap/byteofpython/read/self.html


self se usa solo como una convención, puedes usar spam, bacon o salchicha en lugar de self y obtener el mismo resultado. Es solo el primer argumento pasado a los métodos enlazados. Pero síguese a usar el yo ya que confundirá a otros y a algunos editores.


A pesar del reclamo de webmat, Guido escribió que el ser explícito "no es un hack de implementación, es un dispositivo semántico".

La razón del self explícito en las firmas de definición de métodos es la coherencia semántica. Si tú escribes

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

Esto realmente es lo mismo que escribir

clase C: pase

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

Esta fue una decisión de diseño intencional, no el resultado de la introducción del comportamiento OO en una fecha posterior.

Todo en Python es un objeto, incluidos los literales.

Ver también ¿Por qué debe ''auto'' ser usado explícitamente en definiciones de métodos y llamadas?


Python está diseñado para soportar más que solo la programación orientada a objetos. Preservar la misma interfaz entre métodos y funciones permite que los dos estilos interactúen más limpiamente.

Ruby se construyó desde cero para estar orientado a objetos. Incluso los literales son objetos (evalúa 1.class y obtienes Fixnum). El lenguaje se creó de tal manera que self es una palabra clave reservada que devuelve la instancia actual donde sea que se encuentre.

Si estás dentro de un método de instancia de uno de tu clase, self es una referencia a dicha instancia.

Si está en la definición de la clase en sí (no en un método), la clase es la clase misma:

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

En el momento de definición de la clase, se imprimirá ''I am a C''.

La ''def'' recta define un método de instancia, mientras que ''def self.xxx'' define un método de clase.

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


Bueno, no sé mucho sobre Ruby. Pero el punto obvio del "yo" de Python es que no es una "palabra clave" ... es solo el nombre de un argumento que se envía a su método.

Puede usar cualquier nombre que quiera para este argumento. "Ser" es solo una convención.

Por ejemplo :

class X : def __init__(a,val) : a.x = val def p(b) : print b.x x = X(6) x.p()

Imprime el número 6 en el terminal. En el constructor, el objeto propio se llama realmente a. Pero en el método p (), se llama b.

Actualización: en octubre de 2008, Guido señaló que tener un yo explícito también era necesario para permitir que los decoradores de Python fueran lo suficientemente generales como para trabajar en funciones puras, métodos o métodos de clase: http://neopythonic.blogspot.com/2008/10/why -explicit-self-has-to-stay.html