Python中的多态性与JAVA中的多态性

ep6jt1vc  于 2023-01-06  发布在  Python
关注(0)|答案(3)|浏览(164)

我正在尝试理解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多态性背后的理论?

siotufzp

siotufzp1#

我一直以来的理解是:
多态性是一个概念,基本上说,它看起来一样,但做不同的事情,取决于上下文。
1.如果你有一个同名的方法,但它的参数数量不同,这就是方法重载。
1.如果你有一个同名的方法,有相同数量的参数,但是根据类的不同做了不同的事情,这就是方法重写。
注意:我说的是参数的数量,对于动态类型语言来说,类型只在运行时才重要。例如,对于Java来说,它不仅是参数的数量,当然还有类型。
这两种方法都是处理多态性的具体方法。具体来说,根据您使用的语言,概念可能会被实现,有时甚至会被不同地解释。

vyswwuz2

vyswwuz22#

据我所知,在java中,即使你有相同的方法名,你也有不同的方法,而在python中,当你有:

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

你写的最后一个add覆盖了最后一个add。
总之,当你有不同参数的add时,最好的选择add(self,a,b,c==None,...,n=None),如果...

g9icjywg

g9icjywg3#

根据我对多态性的理解,多态性有很多种形式,可以用用户应用界面来说明。可以实现python代码,这样在运行时,可以使用draw方法将用户应用界面从下拉列表更改为textbox。etc. def draw(controls):对于控件中的控件:控制室,画我希望你明白我的意思.

相关问题