gpt4 book ai didi

python - 下面的代码在Python3中实现了多态性,这样说是否正确?

转载 作者:行者123 更新时间:2023-12-02 06:46:01 24 4
gpt4 key购买 nike

很抱歉问了一个非常模糊的问题。但是如果我们在函数中实现多态性(以便该函数具有公共(public)接口(interface)但接受不同类型的对象),我找不到多态性的严格定义。例如,下面的代码真的实现了多态性吗?我们可以这么称呼吗?

class A:
def func(self):
pass


class B(A):
pass


class C(A):
pass


def common_interface(obj):
obj.func()


common_interface(B())
common_interface(C())

最佳答案

TLDR:是的,就是多态性。

<小时/>

您的类实现教科书子类型多态性。 ABC 均满足其公共(public)子类型 A 的接口(interface)。

您的函数实现 structural polymorphism (Python 将此称为 Protocol )。它接受带有可调用 .func 属性的任何类型。

Well implemented亚型多态性也满足结构多态性。您的函数接受 BC 不是因为它们满足 A,而是因为它们具有可调用的 .func 属性 —他们这样做是因为满足 A

<小时/>

Python 的 „duck typing“使用对象时自然映射到结构类型。您可以通过检查类型(例如通过 isinstance )或使用单个/多个调度(例如通过 singledispatch 和类型注释)来强制使用其他类型语义。

对于此示例,您的函数还可以使用子类型多态性 (obj: A) 或 sum type (obj: Union[B, C])。

关于python - 下面的代码在Python3中实现了多态性,这样说是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com