当前位置:  开发笔记 > 编程语言 > 正文

为什么像Ruby和Python这样的动态语言不具有Java或C#等接口的概念?

如何解决《为什么像Ruby和Python这样的动态语言不具有Java或C#等接口的概念?》经验,为你挑选了3个好方法。

令我惊讶的是,我对Ruby和Python等动态语言产生了更多的兴趣.声称它们是100%面向对象的,但是当我阅读几个基本概念(如接口,方法重载)时,缺少运算符重载.它是以某种方式内置在封面下还是这些语言不需要它?如果后者是真的,那么他们100%面向对象?

编辑:基于一些答案,我看到Python和Ruby都可以进行重载,Ruby 1.8.6和Python 2.5.2就是这种情况吗?



1> RossFabrican..:

动态语言使用duck typing.任何代码都可以在支持这些方法的任何对象上调用方法,因此接口的概念是无关紧要的.事实上,Python确实支持运算符重载,Ruby也是如此.

无论如何,您似乎专注于对面向对象编程不重要的方面.主要关注的是封装,继承和多态等概念,它们在Python和Ruby中都是100%支持的.



2> andri..:

由于后期绑定,他们不需要它.在Java/C#中,接口用于声明某些类具有某些方法,并在编译期间进行检查; 在Python中,是否在运行时检查方法是否存在.

Python中的方法重载确实有效:

>>> class A:
...  def foo(self):
...    return "A"
...
>>> class B(A):
...  def foo(self):
...    return "B"
...
>>> B().foo()
'B'

它们是面向对象的吗?我会说是的.它更多的办法的事情,而不是如果有具体的语言具有的特征X或功能ÿ.


对不起,这不是方法重载.你在做什么是方法覆盖.方法/函数重载是重用相同名称但具有不同签名的能力,如:func a(String a); func a(Int a);. 在您的示例中,您使用具有相同签名的方法,但在子类中重写.[Wikipedia - Overloading](http://en.wikipedia.org/wiki/Function_overloading)和[Wikipedia - Overriding](http://en.wikipedia.org/wiki/Method_overriding)

3> Reed Copsey..:

我只能说python,但过去有接口和家庭编写的接口示例的提议.

但是,python动态处理对象的方式往往会在一定程度上减少对接口的需求(以及接口的好处).

使用动态语言,您的类型绑定在运行时发生 - 接口主要用于对象的编译时约束 - 如果这在运行时发生,则消除了对接口的一些需求.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有