指定对象实现协议并继承自类

问题描述 投票:0回答:1

假设我有一个协议

from abc import abstractmethod
from typing import Protocol

class Supports_connect(Protocol):
    address: int

    @abstractmethod
    def connect(self) -> None:
        ...

还有一些与这个协议类无关的

class Camera:
    pass  #some implementation

在函数中,我想接受实现

Supports_connect
协议并继承自
Camera
类的对象。 (即只接受支持连接的相机)

def connect_cameras(camera: IsCamera_and_supports_connect):
   camera.connect()

如何输入?

IsCamera_and_supports_connect
应该是什么?

python python-typing typing
1个回答
0
投票

正如@joel所说,交叉点会很棒。

但是我找到了一个解决方法:我们可以从实现协议的类继承:

from abc import abstractmethod
from typing import Protocol


class Supports_connect(Protocol):
    address: int

    @abstractmethod
    def connect(self) -> None:
        ...


class connect_implementation(Supports_connect):
    def __init__(self, address: int) -> None:
        self.address = address

    def connect(self) -> None:
        print("Connected")


class Camera:
    pass  # some implementation


class IsCamera_and_supports_connect(Camera, connect_implementation):
    ...

就是这里

© www.soinside.com 2019 - 2024. All rights reserved.