如何在继承的classmethod上指定Python类型提示?

时间:2017-07-20 15:56:59

标签: python type-hinting

在Python 3.5中,我想在返回类的新实例的类方法上使用类型提示。

例如,我有以下两个类:

class A:
    @classmethod
    def new_thing(cls):
        return cls()

class B(A):
    pass

我想向new_thing添加一个类型提示,以指定它返回它所调用的类的实例。

我找到的最接近的解决方案是使用TypeVar,例如:

from typing import Type, TypeVar

T = TypeVar('T')

class A:
    @classmethod
    def new_thing(cls: Type[T]) -> T:
        return cls()

但是,这并不表示对cls类型的任何限制,而cls应该始终是A或其子类之一的实例(即,#&} 39;没有任何暗示cls应该在这里可以调用。)

有没有办法实现这个目标? TypeVar有一个bound参数,所以首先想到的是:

T = TypeVar('T', bound=A)

但这不起作用,因为A在宣布TypeVar时未定义(如果没有{{我不能宣布A首先定义{1}}。

0 个答案:

没有答案