
Explore Python's multifaceted type system, from duck typing to static typing, and learn how and why to use type hints, protocols, and type checkers to prevent runtime errors.
Explore how types define data kinds, permissible operations, and safe memory use in modern languages, with Python's role and the rise of static typing.
Explore duck typing in Python, where code uses an object's attributes and methods instead of its type. Learn how dynamic typing enables rapid prototyping and gradual typing with type hints.
Demonstrate how type hints annotate function parameters and return types, enabling a static type checker to catch mismatches before runtime and guide code correctness.
Compare dynamic typing, where types are stored in objects and checked at runtime. Contrast static typing, where types are declared in source code and checked by compilers or static checkers.
Explore how type system concepts define safety and behavior. Distinguish trapped versus untrapped errors and clarify casting versus conversions across languages like Python, JavaScript, and C.
Explore how a type system balances soundness and completeness, using gradual typing and static checks in Python, C#, and TypeScript to prevent runtime errors.
In Python, it's easy to overlook types. You can simply write a = 10, and it works without needing to specify its type. However, beneath Python’s simple and intuitive syntax lies a surprisingly complex type system. In fact, as you'll discover in this course, Python integrates multiple type systems to manage data and behavior effectively.
You might ask—why study types at all? After all, you probably use them every day in Python without thinking much about it. And that’s true: it’s entirely possible to write functioning code without understanding the details of how the type system works. But, as with many aspects of software engineering, gaining a deeper understanding of the how and why allows you to make smarter, more intentional design decisions in your code and systems.
Target audience
Developers who especially benefit from this course, are:
Beginners and intermediates who want to know the mechanics and purpose of types and type systems in Python
Software engineers who want to use the type system as an extra development tool by adding type hints to improve their code quality
Developers who want to learn the proper terminology to make discussing code in your team and searching for information online more efficient
Challenges
Python is an easy language to learn. It hides many of the nuances about data types. But when developers get more experienced, they are more confronted with Python’s unique way to create, instantiate and work with data types. It is at this moment where it helps to take a deep dive into Types and Type Systems.
What can you do after this course?
Fix bugs faster by understanding error messages better
Prevent common type problems by knowing type system techniques
Make classes more efficient by using Python’s unique language features
Create clean modular design by using Protocol classes and type hints
Discuss pro’s and con’s of proposed solutions by learning proper technical terms
Make the transition from another language to Python more efficient
Topics
Introduction to type systems: Type system categories and their basic building blocks: types.
Implicit vs. explicit typing: Literals, variables and attributes.
Dynamic vs. static typing: Duck typing, Python protocols and the Python Datamodel, Compilers and interpreters.
Type Hints: Annotations, static type checkers, kind of types, special typing constructs.
Type flexibility: Safe, sound, complete. Promotion, conversion and comparison.
Nominal vs. structural typing: Using composite classes and protocols to design interfaces for modular systems.
Duration
3 hours video time.
The teacher
This course is taught by Loek van den Ouweland, a senior software engineer with 30 years of professional experience. Loek is the creator of Wunderlist for windows, Microsoft To-do and Mahjong for Windows and loves to teach software engineering.