我如何在Python类型注释中引用“任何将父类子类化的对象”?

示例:FooBase是抽象基类,从中继承Foo1Foo2等。我希望函数接受FooBase的任何后代。请问这样做:

def do_something(self, bar:FooBase):
    pass


还是只接受FooBase类的对象,鉴于FooBase是抽象的,这当然是不可能的吗?在那种情况下,我是否需要为所有情况建立一个Union(请上帝保佑我不要!),或者我可以通过其他方式抽象地表达这种关系吗?

最佳答案

继承也适用于带注释的类型。作为Foo子类型的FooBase的任何实例也是FooBase类型的有效对象。因此,您可以向函数传递FooBase对象,也可以传递Foo对象。

如果要将功能限制为仅FooBar的子类,则可以查看Type[C]构造:The type of class objects

关于python - Python 3类型注释和子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41790843/

10-12 06:47