La anotación de la función de Python en el tipo de retorno de clase es el aumento de clase no definido

En Python 3.6.1, hay varias formas de hacer sugerencias de tipo, en la cadena de documentos o en la anotación. ¿Cómo puedo lograr esto usando la anotación?

Digamos que tengo una clase, que tiene un método de clase load para cargar datos de algún lugar, json o base de datos, por ejemplo, y construir y devolver una instancia de esta clase.

 class Foo: @classmethod def load(cls, bar) -> Foo: pass 

Creo que esto es bastante sencillo, pero el intérprete de Python generó un error que indica que Foo no está definido.

Sé el motivo, porque cuando python carga la firma de la función de carga de Foo, la definición de la clase Foo no está terminada, por lo que Foo aún no está definido.

¿Es esto un inconveniente de la anotación de la función? ¿Puedo encontrar alguna manera de lograr este objective, en lugar de usar la cadena de documentos para escribir una sugerencia, ya que realmente me gusta la claridad de la anotación de funciones?

Related of "La anotación de la función de Python en el tipo de retorno de clase es el aumento de clase no definido"

Puedes usar literales de cadena para referencias hacia adelante :

 import typing class Foo: @classmethod def load(cls, bar) -> 'Foo': pass class Bar: @classmethod def load(cls, bar) -> Foo: pass print(typing.get_type_hints(Foo.load)) # {'return': } print(typing.get_type_hints(Bar.load)) # {'return': }