我正在尝试理解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多态性背后的理论?
3条答案
按热度按时间siotufzp1#
我一直以来的理解是:
多态性是一个概念,基本上说,它看起来一样,但做不同的事情,取决于上下文。
1.如果你有一个同名的方法,但它的参数数量不同,这就是方法重载。
1.如果你有一个同名的方法,有相同数量的参数,但是根据类的不同做了不同的事情,这就是方法重写。
注意:我说的是参数的数量,对于动态类型语言来说,类型只在运行时才重要。例如,对于Java来说,它不仅是参数的数量,当然还有类型。
这两种方法都是处理多态性的具体方法。具体来说,根据您使用的语言,概念可能会被实现,有时甚至会被不同地解释。
vyswwuz22#
据我所知,在java中,即使你有相同的方法名,你也有不同的方法,而在python中,当你有:
你写的最后一个add覆盖了最后一个add。
总之,当你有不同参数的add时,最好的选择add(self,a,b,c==None,...,n=None),如果...
g9icjywg3#
根据我对多态性的理解,多态性有很多种形式,可以用用户应用界面来说明。可以实现python代码,这样在运行时,可以使用draw方法将用户应用界面从下拉列表更改为textbox。etc. def draw(controls):对于控件中的控件:控制室,画我希望你明白我的意思.