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?
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': }