No es que Python no pueda, pero no es así. La diferencia está en los sistemas de tipos que los diseñadores de los idiomas eligen seguir.
Python utiliza el tipado de pato y ha tipeado objetos pero sin tipo de nombres de variables. Las restricciones de tipo no se verifican en tiempo de compilación; más bien, las operaciones en un objeto pueden fallar, lo que significa que el objeto dado no es del tipo adecuado. A pesar de estar tipado dinámicamente, Python tiene un fuerte tipeo, que prohíbe las operaciones que no están bien definidas (por ejemplo, agregar un número a una cadena) en lugar de tratar de encontrarlas en silencio.
Scala es un lenguaje estáticamente tipado, es decir, los tipos se comprueban en tiempo de compilación. Un mecanismo de inferencia de tipo local se ocupa de que el usuario no tenga que anotar el programa con información de tipo redundante. Las operaciones que rompen las restricciones de tipo conducen a errores de compilación, no a errores de tiempo de ejecución. También vea The Purpose of Scala's Type System, especialmente la sección donde se discute la tipificación de pato.
Scala tiene tipos. Simplemente no tiene que escribirlos todo el tiempo (juego de palabras intencionado). – Thilo
No creo que sea un duplicado. La otra pregunta es más sobre "por qué Python no necesita escribir nada". – Thilo
@Emil: ¿Por qué todos quieren que todo el lenguaje de programación tenga el mismo aspecto? – pyfunc