The following code example minimally illustrates the five primary features of the Traits package.
# all_traits_features.py from enthought.traits.api import Delegate, HasTraits, Instance, Int, Str import enthought.traits.ui class Parent(HasTraits): # INITIALIZATION: last_name' is initialized to '': last_name = Str('') class Child(HasTraits): age = Int # VALIDATION: 'father' must be a Parent instance: father = Instance(Parent) # DELEGATION: 'last_name' is delegated to father's 'last_name': last_name = Delegate('father') # NOTIFICATION: This method is called when 'age' changes: def _age_changed(self, old, new): print 'Age changed from %s to %s ' % (old, new) # Set up the example: joe = Parent() joe.last_name = 'Johnson' moe = Child() moe.father = joe # DELEGATION in action: print "Moe's last name is %s" % moe.last_name # NOTIFICATION in action: moe.age = 10 # VISUALIZATION: Displays a UI for editing moe's # attributes (if a supported GUI toolkit is installed) moe.configure_traits()
The DELEGATION and NOTIFICATION segments in the above example yield the following command-line output:
Moe's last name is Johnson Age changed from 0 to 10
The configure_traits() command in the above example opens the following dialog box for editing the attributes of the Child instance:
Clicking Father on this dialog box opens an additional dialog box to modify the Parent instance: