令我惊讶的是,我对Ruby和Python等动态语言产生了更多的兴趣.声称它们是100%面向对象的,但是当我阅读几个基本概念(如接口,方法重载)时,缺少运算符重载.它是以某种方式内置在封面下还是这些语言不需要它?如果后者是真的,那么他们100%面向对象?
编辑:基于一些答案,我看到Python和Ruby都可以进行重载,Ruby 1.8.6和Python 2.5.2就是这种情况吗?
动态语言使用duck typing.任何代码都可以在支持这些方法的任何对象上调用方法,因此接口的概念是无关紧要的.事实上,Python确实支持运算符重载,Ruby也是如此.
无论如何,您似乎专注于对面向对象编程不重要的方面.主要关注的是封装,继承和多态等概念,它们在Python和Ruby中都是100%支持的.
由于后期绑定,他们不需要它.在Java/C#中,接口用于声明某些类具有某些方法,并在编译期间进行检查; 在Python中,是否在运行时检查方法是否存在.
Python中的方法重载确实有效:
>>> class A: ... def foo(self): ... return "A" ... >>> class B(A): ... def foo(self): ... return "B" ... >>> B().foo() 'B'
它们是面向对象的吗?我会说是的.它更多的办法的事情,而不是如果有具体的语言具有的特征X或功能ÿ.
我只能说python,但过去有接口和家庭编写的接口示例的提议.
但是,python动态处理对象的方式往往会在一定程度上减少对接口的需求(以及接口的好处).
使用动态语言,您的类型绑定在运行时发生 - 接口主要用于对象的编译时约束 - 如果这在运行时发生,则消除了对接口的一些需求.