Python 从类和协议的多重继承

Python multiple inheritance from class and protocol

提问人:opnightfall1771 提问时间:10/31/2021 更新时间:10/31/2023 访问量:2748

问:

在 Python 中,我有两个协议,其中一个继承自另一个:

class SupportsFileOperations(Protocol):
    ...

class SupportsMediaOperations(SupportsFileOperations):
    ...

然后,我有几个具体的类来实现这些协议,其中一个从另一个继承而来。

class File(SupportsFileOperations):
    ...

class MediaFile(File, SupportsMediaOperations):
    def __init__(self):
        File.__init__(self)

我的问题是,调用构造函数是初始化它的正确方法吗?我不确定多重继承如何与协议配合使用。File.__init__(self)MediaFile

谢谢!

Python 继承 协议

评论

0赞 Gderu 10/31/2021
在这种情况下,什么是a?对象来自哪个库?Protocol
0赞 opnightfall1771 10/31/2021
对不起,这是在使用from typing import Protocol
0赞 bers 5/18/2023
由于我通过谷歌偶然发现了这个问题,我不确定你是否正确使用了“多重继承”一词。恕我直言,“多重继承”是一次从多个基类继承。恕我直言,您描述的是所谓的“多级继承”。(请注意,Jean-Francois T. 的答案使用多重继承来解决您的多级继承问题。

答:

4赞 Jean-Francois T. 3/25/2022 #1

您可以简单地添加子类:Protocol

from typing import Protocol

class SupportsFileOperations(Protocol):
    ...

class SupportsMediaOperations(SupportsFileOperations, Protocol):
    ...
0赞 pingvincible 10/31/2023 #2

在 Python 中使用协议时,使用结构子类型,因此不必继承协议类。如果你想把某个类看作是协议的一个子类型,你只需要用相同的函数签名实现所有协议方法。

评论

0赞 Community 10/31/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。