Observable typed attributes for Python classes
The Traits project allows Python programmers to use a special kind of type definition called a trait, which gives object attributes some additional characteristics:
Initialization: A trait has a default value, which is automatically set as the initial value of an attribute before its first use in a program.
Validation: The type of a trait attribute is explicitly declared. The type is evident in the code, and only values that meet a programmer-specified set of criteria (i.e., the trait definition) can be assigned to that attribute.
Delegation: The value of a trait attribute can be contained either in the defining object or in another object delegated to by the trait.
Notification: Setting the value of a trait attribute can notify other parts of the program that the value has changed.
Visualization: User interfaces that allow a user to interactively modify the value of a trait attribute can be automatically constructed using the trait’s definition. (This feature requires that a supported GUI toolkit be installed. If this feature is not used, the Traits project does not otherwise require GUI support.)