小编Dem*_*kyy的帖子

Python 类型 - 限制列表仅允许一种类型的子类

我有 3 个简单的类,例如:

class Animal(abc.ABC):
    ...

class Cat(Animal):
    ...

class Dog(Animal):
    ...
Run Code Online (Sandbox Code Playgroud)

然后我有一个注释如下的函数:

def speak(animals: List[Animal]) -> List[str]:
   ...
Run Code Online (Sandbox Code Playgroud)

我的问题是我想限制List[Animal]只包含一种动物,所以:

speak([Dog(), Dog()]) # OK
speak([Cat(), Cat()]) # OK
speak([Cat(), Dog()]) # typing error
Run Code Online (Sandbox Code Playgroud)

我将如何注释该speak函数以实现此目的?是否可以使用打字来完成,或者我是否被迫在运行时检查这一点?

我尝试使用上面的方法,但是在调用likeList[Animal]时不会出现错误。speakspeak([Cat(), Dog()])

我也尝试过使用泛型,TypeVar('T', bound=Animal)但这仍然允许我传递子List类的任意组合。

python python-typing

6
推荐指数
1
解决办法
602
查看次数

标签 统计

python ×1

python-typing ×1