Writing Python like it's Rust - more robust code with type hints — Jakub Beránek

Learn how Python's type hints can improve code safety and maintainability, prevent bugs, and enable better tooling - drawing inspiration from Rust's type system.

Key takeaways
  • Type hints improve code understanding, documentation, and help catch bugs early without needing runtime checks or tests

  • Use type hints everywhere, especially at interface boundaries (function signatures) and in data classes - they provide self-documenting code that never gets out of sync

  • Data classes should be preferred over dictionaries and tuples for structured data - they provide better type safety and IDE support

  • Make illegal states unrepresentable by designing APIs that prevent misuse through types (example: separate types for authenticated/unauthenticated clients)

  • Type hints enable better IDE support with autocompletion, navigation, and refactoring capabilities

  • Type checkers like MyPy can validate entire codebases quickly without running the code, providing faster feedback than tests

  • Type hints are optional and can be gradually adopted - use Any type when needed for maximum flexibility

  • Consider the tradeoff between type safety and code complexity - not everything needs to be perfectly typed

  • Type hints don’t affect runtime performance but improve development speed and code maintainability

  • While Python’s type system isn’t as robust as Rust’s, combining type hints with good API design can prevent many common bugs