Si bien todo es un objeto en Python, difiere de Ruby en su enfoque para resolver nombres e interactuar con objetos.
Por ejemplo, mientras que Ruby le proporciona un método 'to_s' en la clase base del objeto, para exponer esa funcionalidad, Python lo integra al tipo de cadena en sí mismo: convierte un tipo en una cadena mediante la construcción de una cadena de eso. En lugar de 5.to_s
, tiene str(5)
.
No se deje engañar, sin embargo. Todavía hay un método detrás de las escenas - por lo que funciona este código:
(5).__str__()
Por lo tanto, en la práctica, los dos son fundamentalmente similares, pero que ellos utilizan de manera diferente. La longitud de secuencias como listas y tuplas en Python es otro ejemplo de este principio: la característica real se basa en métodos con nombres especiales, pero expuestos a través de una interfaz más simple y fácil de usar (la función len
).
La pitón equivalente a lo que escribió en su pregunta sería entonces:
(5).__add__(6)
La otra diferencia que es importante es cómo se implementan las funciones globales. En python, los globales están representados por un diccionario (como lo son los locales). Esto significa que el siguiente:
foo(5)
es equivalente a esto en Python:
globals()["foo"].__call__(5)
Mientras rubí efectivamente hace esto:
Object.foo(5)
Esto tiene un gran impacto en el enfoque utilizado cuando escribiendo código en ambos idiomas. Las bibliotecas de Ruby tienden a crecer mediante la adición de métodos a tipos existentes como Object, mientras que las bibliotecas de Python tienden a crecer mediante la adición de funciones globales a un módulo dado.
Cuando dices "objeto", ¿te refieres exactamente a la terminología OOP? Tanto python como ruby son lenguajes novatos, por lo que la pregunta tiene más sentido para mí si realmente la pides relacionada con Smalltalk, C++ o con OOP-paradigma (teoría) abstraído de cualquier idioma en particular: "Es Python un lenguaje OO puro, es decir, ¿cada tipo (de datos) es un objeto (o una clase de objetos)? http://en.wikipedia.org/wiki/Object-oriented_programming –