Anders Andersen, Type, signatures, interfaces, and components in Python: The NOOP approach, Universitetet i Tromsø, 2010.
Python is an interpreted language with dynamic typing. Variables are given a type when they are given a value, and they change type if they are given a new value of a new type. This is also true for Python function arguments. To introduce type safety, interfaces, and a component model in Python NOOP proposes a type language and a way to apply typing to functions (and methods). This feature-rich type language and how to apply it to functions is described in the first part of this paper. The second part use this introduced type language to create interfaces and a software component model.