Estou procurando uma maneira de extrair a anotação do tipo de retorno de uma propriedade de uma classe, por exemplo:
class Test:
@property
def foo(self) -> int:
return 1
print(return_type_extract(Test, 'foo')) # <class 'int'>
Para métodos padrão, isso pode ser feito assim:
import inspect
class Test:
def foo(self) -> int:
return 1
def return_type_extract(cls: type, method_name: str) -> type:
method = getattr(cls, method_name)
return inspect.signature(method).return_annotation
print(return_type_extract(Test, 'foo')) # <class 'int'>
Este método, entretanto, não funciona para o @property
decorador, pois gera um erro interno inspect.signature
. Procurei um equivalente para propriedades na inspect
biblioteca, mas até agora não tive sorte.
Se o atributo recuperado for um objeto de propriedade, podemos acessar seu método getter (
.fget
) para obter a função subjacente. Em seguida, usamosget_type_hints()
para extrair a anotação do tipo de retorno da função subjacente.Assim :