假设我有一个协议
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
应该是什么?
正如@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):
...
就是这里