Вы не должны обеспечивать безопасность типов таким способом.Да, кто-то может сознательно взломать ваш код, предоставив значения, для которых ваш контейнер не будет работать, но это точно так же с другими языками.И даже если кто-то поместит правильное значение параметра в метод или функцию-член, это не обязательно означает, что он не сломан: если программа ожидает IP-адрес, но вы передаете имя хоста, он все равно не будет работать, хотя оба могутstrings.
Я говорю следующее: мышление Python по своей сути отличается.Типизирование утки в основном говорит: Эй, я не ограничен определенными типами, но интерфейсом или поведением объектов.Если объект действует так, как будто это тот объект, который я ожидал, мне все равно - просто сделайте это.
Если вы попытаетесь ввести проверку типов, вы в основном ограничиваете одну из самых полезных функций.языка.
При этом, вам действительно нужно углубиться в разработку через тестирование или, по крайней мере, в модульное тестирование.На самом деле нет оправдания тому, чтобы не делать это с динамическими языками - это просто перенос способа обнаружения ошибок (типа) на другой этап процесса сборки, от времени компиляции к запуску набора тестов несколько раз в день.Хотя это кажется дополнительным усилием, на самом деле это сократит время, затрачиваемое на отладку и исправление кода, поскольку это по своей сути более мощный способ обнаружения ошибок в вашем коде.
Но хватит этого, я уже болтаю.