如何暗示变量是从另一个类继承的类?

时间:2018-06-12 16:56:33

标签: python python-3.x type-hinting mypy

考虑这个人为的代码片段:

EXECUTE user_query('joe', 'bob', 'sally');

我想暗示class Fooer(): def __init__(self, *args, **kwargs): # do things def foo(self) -> int: # do more things def foo(fooer, *args, **kwargs) -> int: return x(*args, **kwargs).foo() 的{​​{1}}参数应该是fooer的子类。它不是foo()的实例,它是Fooer本身或其子类。我能想到的最好的是

Fooer

这不够具体。

我怎样才能更好地暗示这一点?

2 个答案:

答案 0 :(得分:3)

从PEP-484(The type of class objects),解决方案是使用Type[C]来指示C的子类,其中C是由基类限定的类型var

F = TypeVar('F', bound=Fooer)

def foo(fooer: Type[F], *args,**kwargs) -> int:
    ...

(公平地说,如果没有像PEP-484那样使用TypeVar与在@ es的答案中使用课程本身,我之间的区别并不大。 。)

答案 1 :(得分:2)

Type

中有一个typing
from typing import Type

class A(object):
    def __init__(self, thing):
        self.thing = thing

class B(A):
    pass

def make_it(a_class: Type[A]):
    return a_class(3)

make_it(B)  # type checks ok
make_it(str)  # type checks complaining