Python - это динамический язык. Переменные не имеют типов, переменные содержат ссылки на объекты. Только объекты имеют типы. Поэтому до времени выполнения невозможно узнать, какой тип содержит переменная. Разработчики Python должны обойти это с хорошей ясной документацией, объясняющей, что это за ожидаемый тип.
Во время выполнения мы можем видеть тип каждого атрибута (или члена) объекта Python (экземпляра, а не класса):
def types_of_instance_attributes(instance):
return {k: type(v) for k, v in vars(instance).items()}
Тем не менее, в python 3.6+ статический тип подсказки стали частью языка, чтобы помочь пользователям документировать и обеспечить более эффективную работу контролеров статического типа. Они больше похожи на C ++:
class ComplexNumber:
_re: int
_im: int
def __init__(self, real: int, imaginary: int) -> None:
self._re = real
self._im = imaginary
def magnitude(self) -> float:
return (self._re**2 + self._im**2)**0.5
com = ComplexNumber(12, -3)
x = com._re # type checker knows is an int
y = com.magnitude() # type checker knows is a float
z: str = com._im # ERROR in type checker (int -> str mismatch)