java - Python 多态 VS JAVA 多态

标签 java python python-3.x oop polymorphism

我试图理解Python中的多态性。读了很多文章,但我心中仍有一个疑问。当我与 Java 进行比较时,Python 对我来说有点令人困惑。

据我所知,多态性是“一物有多种形式”。多态性可以使用运算符重载和方法重载来演示。让我们以方法重载作为演示多态性概念的一种手段。在java中我们可以不使用继承来编写它。请参阅下面的代码。

 public class Main{
    public static void main(String[] args) {
        System.out.println(add(1,2));;
        System.out.println(add(1,2,3));
    }
    public static int add(int a,int b){
        return a+b;
    }
    public static int add(int a,int b,int c){
        return a+b+c;
    }   
}

Python 代码:

class TestPolymorphism:
    def add(self,a,b):
        return (a+b)
    def add(self,a,b,c):
        return (a+b+c)

obj = TestPolymorphism()
print(obj.add(1,2)) #will get an error
print(obj.add(1,2,3))

相同的方法重载在 java 中有效,但在 python 中无效。为什么有区别?如果我想让它工作,那么我必须更改我的 python 代码,如下所示:

class TestPolymorphism:
    def add(self,a,b,c=None):
        if c ==None:
            sum  = a+b
            return sum
        else:
            sum = a+b+c
            return sum

obj = TestPolymorphism()
print(obj.add(1,2))
print(obj.add(1,2,3))

我不相信上面的代码是多态性的示例。有类似this的文章没有给我令人信服的观点。

谁能告诉我Python多态性背后的理论吗?

最佳答案

我一直这样理解:

多态性是一个概念,基本上是说它看起来是一样的,但根据上下文的不同,做的事情会有所不同。

  1. 如果你有一个同名的方法,但参数数量不同,这就是方法重载。

  2. 如果您有一个具有相同数量参数的同名方法,但根据类执行不同的操作,则这是方法重写。

注意:我说的是参数数量,对于动态类型语言,类型仅在运行时才重要。例如,对于 Java,它不仅是参数的数量,当然还包括类型。

两者都是处理多态性的具体方法。 具体来说,根据您使用的语言,这个概念可能会被实现,有时甚至会以不同的方式解释。

关于java - Python 多态 VS JAVA 多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61138173/

相关文章:

python 反向迭代器与生成器行为

java - 由于日期而导致 Android 数据库 SQLite 出错

java - 用于 Nokia Symbian S60 的 Java 短信过滤器应用程序

java - 重写的 android 生命周期方法如何在 super 调用之后运行代码而无需转到其后续生命周期方法

python - 在 python 子进程中捕获 logger.info 输出?

python - 在python 3中制作 'byte type object'

java - UI线程如何等到后台线程完成处理?

python - pandas 过滤日期最近 3 个月

python - 无法找出 keras 输入形状错误?

python - 使用滚动背景时按住空格键或向下键后 Sprite 会消失