Podczas gdy wszystko jest obiektem w Pythonie, różni się od Rubiego podejściem do rozwiązywania nazw i interakcji z obiektami.
Na przykład, podczas gdy Ruby udostępnia metodę "to_s" w klasie obiektu, w celu ujawnienia tej funkcji, Python integruje ją z samym typem łańcucha - przekształcasz typ na ciąg znaków, tworząc ciąg znaków z tego. Zamiast 5.to_s
masz str(5)
.
Nie daj się jednak zwieść. Jest jeszcze metoda za kulisami - dlatego ten kod działa:
(5).__str__()
Więc w praktyce, dwa są zasadniczo podobne, ale można ich używać w różny sposób. Długość sekwencji, takich jak listy i krotki w Pythonie, jest kolejnym przykładem tej zasady w pracy - rzeczywista funkcja jest zbudowana na metodach o specjalnych nazwach, ale jest odsłonięta przez prostszy, łatwiejszy w użyciu interfejs (funkcja len
).
Pyton równowartość co napisałeś w swoim pytaniu byłoby tak:
(5).__add__(6)
Druga różnica to ważne jest, w jaki sposób realizowane są funkcje globalne. W pythonie globale są reprezentowane przez słownik (podobnie jak lokalne). Oznacza to, że:
foo(5)
jest odpowiednikiem tego w Pythonie:
globals()["foo"].__call__(5)
Podczas rubin skutecznie robi to:
Object.foo(5)
ten ma duży wpływ na podejściu zastosowanym przy pisanie kodu w obu językach. Biblioteki Ruby mają tendencję do wzrostu poprzez dodanie metod do istniejących typów takich jak Object, podczas gdy biblioteki Pythona mają tendencję do wzrostu poprzez dodanie funkcji globalnych do danego modułu.
Kiedy mówisz "obiekt", masz na myśli właśnie terminologię OOP? Zarówno Python, jak i Ruby są raczej nowymi językami, więc pytanie jest dla mnie bardziej sensowne, jeśli faktycznie zapytasz o to związane z Smalltalk, C++ lub paradygmatem OOP (teoria), wyabstrahowane z dowolnego konkretnego języka: "Czy python jest językiem OO czystym, tj. każdy typ (dane) jest obiektem (lub klasą obiektów)? " http://en.wikipedia.org/wiki/Object-oriented_programming –