- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解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多态性背后的理论吗?
最佳答案
我一直这样理解:
多态性是一个概念,基本上是说它看起来是一样的,但根据上下文的不同,做的事情会有所不同。
如果你有一个同名的方法,但参数数量不同,这就是方法重载。
如果您有一个具有相同数量参数的同名方法,但根据类执行不同的操作,则这是方法重写。
注意:我说的是参数数量,对于动态类型语言,类型仅在运行时才重要。例如,对于 Java,它不仅是参数的数量,当然还包括类型。
两者都是处理多态性的具体方法。具体来说,根据您使用的语言,这个概念可能会被实现,有时甚至会以不同的方式解释。
关于java - Python 多态 VS JAVA 多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61138173/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!