考虑这个人为的代码片段:
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
这不够具体。
我怎样才能更好地暗示这一点?
答案 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