Python: укажите тип возвращаемого значения метода класса, который работает с наследованием - PullRequest
0 голосов
/ 01 мая 2020

Я пытался понять, как я могу указать тип возврата метода класса в Python, чтобы он правильно интерпретировался (например, в моей документации по Sphinx) даже для дочерних классов.

Предположим, у меня было:

class Parent:

    @classmethod
    def a_class_method(cls) -> 'Parent':
        return cls()


class Child(Parent):
    pass

Что я должен указать в качестве типа возврата a_class_method, если я хочу, чтобы оно было Parent для родителя и Child для ребенка? Я также попробовал __qualname__, но это тоже не сработало. Разве я не должен аннотировать тип возврата?

Заранее спасибо!

1 Ответ

2 голосов
/ 01 мая 2020

Для этого теперь поддерживается синтаксис , аннотируя cls переменной типа. Цитирую один из примеров из PEP 484:

T = TypeVar('T', bound='C')
class C:
    @classmethod
    def factory(cls: Type[T]) -> T:
        # make a new instance of cls

class D(C): ...
d = D.factory()  # type here should be D
...