Python 解释多态性
什么是多态性?我不确定我是否理解正确 在Python范围内,我从中得到的是我可以定义如下参数:Python 解释多态性,python,oop,polymorphism,definition,Python,Oop,Polymorphism,Definition,什么是多态性?我不确定我是否理解正确 在Python范围内,我从中得到的是我可以定义如下参数: def blah (x, y) 无需指定类型,与另一种语言(如Java)相反,它看起来更像是: public void blah (int x, string y) 我说得对吗?是的,这是“类型多态性”的一个例子。然而,当谈到面向对象编程时,“多态性”通常与“子类型多态性”有关。您给出的示例通常称为“类型化” java、C++、C++等,使用静态类型。在这种情况下,必须指定编译时的类型 Pyth
def blah (x, y)
无需指定类型,与另一种语言(如Java)相反,它看起来更像是:
public void blah (int x, string y)
我说得对吗?是的,这是“类型多态性”的一个例子。然而,当谈到面向对象编程时,“多态性”通常与“子类型多态性”有关。您给出的示例通常称为“类型化”
java、C++、C++等,使用静态类型。在这种情况下,必须指定编译时的类型
Python和Ruby使用动态,因为类型是在解释过程中推断出来的 子类型多态性或“多态性”是作为派生类型的基类引用正确调用派生类型的方法的能力 例如(在近似伪代码中):这就是多态性。多态性的字面意思是“许多形状”,这很好地解释了它的用途。多态性背后的思想是,可以对不同的类型使用相同的调用,并使它们行为适当 将其与类型系统区分开来很重要-强类型语言要求通过继承链将对象关联为多态的,但对于弱类型语言,这是不必要的 在Java(等人)中,这就是接口之所以有用的原因——它们定义了可以在对象上调用的函数集,而无需指定确切的对象——实现该接口的对象相对于该接口是多态的
在Python中,由于事物是动态类型化的,接口就不那么正式了,但思想是一样的——在两个知道如何正确实现foo()的对象上调用foo()会成功,但我们不关心它们到底是什么类型。以多种形式定义函数的能力称为多态性。在C++中,java、C++有两种多态类型:编译时多态(<强>重载< /强>)和运行时多态(<强>重写< /强>)。 重写:当类方法与父类中的方法具有相同的名称和签名时,会发生重写 重载:重载在编译时确定。当多个方法具有相同的名称时,会发生此错误:
您所说的是自动键入,或者可能是类型检测。这是一种动态语言倾向于做的事情——它允许用户在构建时不知道或不关心类型——类型是在运行时计算出来的,而不限于特定的类型 多态性是指有两个类继承自一个主类,但每个类实现的方法不同 例如,如果将Vehicle作为根类,将Car和Bicycle作为实例,则如果车辆是Car的实例,则Vehicle.CalculateInstance()将基于可用的汽油进行操作,如果车辆是自行车类型,则将基于骑自行车者的耐力进行操作 通常是这样使用的:
getTotalDistance(Vehicle[] vehicle) {
int dist=0
for each vehicle
dist+=vehicle.calculateDistance();
请注意,您传递的是基类型,但实例永远不会是Vehicle本身,而是Vehicle的子类——但您不会将其强制转换为子类型。多态性意味着车辆变形为所需的任何子对象。不,这不是多态性。多态性是一个概念,即一个可执行单元可以有许多不同的实现,并且差异发生在幕后,而调用方不知道 例如,鸟和飞机是飞行对象。所以FlyingObject有一个方法调用
fly()
,Bird和Plane都实现了fly()
方法。Bird和Plan飞行方式不同,因此实现方式也不同。在客户端看来,鸟或飞机如何飞行并不重要,他们只需调用FlyingObject的fly()
方法,不管该对象是平面还是鸟
您所描述的是动态和静态类型检查,类型兼容性分别在运行时和编译时完成
希望这一切都能实现。
NawaMan简短回答:为特定目的将不同类型的编程类型实例视为相同的能力 长答覆: 来自古希腊的poly(多)+morph(形式)+ism 多态性是一种通用技术,能够以某种方式统一处理不同的类型。编程领域的例子包括:
(视为 (Java中的泛型)参数多态性
,在Java中实现 使用动态消息分派 在对象实例之间李>子类型 多态性
- 特设 多态性,它与 能够定义 相同的名称,仅因类型而异 它们处理(Java中的重载)
“多态性”一词也用于描述其他不相关领域的概念,如a。注意不同的人使用不同的术语;特别是,在和(其他部分)之间通常存在裂痕 一般来说,多态性意味着一个方法或函数能够处理不同类型的输入。例如,
Integer
类中的add
方法(或+
运算符)可能执行整数加法,而Float
类中的add
方法执行浮点加法,而Bignum
类中的add
方法对任意大小的数字执行正确的操作。多态性是调用addgetTotalDistance(Vehicle[] vehicle) {
int dist=0
for each vehicle
dist+=vehicle.calculateDistance();
def dosomething(thing):
if type(thing)==suchandsuch:
#do some stuff
elif type(thing)==somesuch:
#do some other stuff
elif type(thing)==nonesuch:
#yet more stuff
thing.dosomething()