Первый , Python часто использует типизирование утки : если объект имеет требуемые свойства и методы, его можно использовать. Вы можете проверить так:
if hasattr(var2, 'method_name'):
... your code ...
Другой способ реализации типизации воздуховода неявный. Например, если ваша функция увеличивает свой аргумент, вы можете не проверять аргумент, а просто написать:
result = int(var1) + 1
И если var1
не может быть приведен к int, пользователь получит вполне читаемую ошибку:
TypeError: int() argument must be a string or a number, not 'MyCustomClass'
Второй , вы можете явно проверить , если var является экземпляром некоторого класса (или его потомка). Если вы знаете, что var1
является экземпляром dict
:
if isinstance(var2, dict):
... your code ...
Этот код будет работать, если var2
является экземпляром dict
, defaultdict
или другим подклассом dict
.
Вывод : нет единой квитанции проверяющих параметров. Вы всегда должны соблюдать баланс между защитой от недопустимых значений атрибутов и удобочитаемостью кода. Представьте, что вы пользователь, который вызывает вашу функцию: будет ли очевидно, какой тип должны иметь аргументы? Если вы передадите неправильное значение, будет ли понятна ошибка?