#!/usr/bin/env python __version__ = "1.0" """OverloadedAccessors.py This recipe presents an ideom for simplified accessors, that combines typical getter and setter functionality of an attribute into a single overloaded method, that instead of getATTRIBUTE and setATTRIBUTE can now just be called ATTRIBUTE. When called without arguments it acts as a getter and retrieves the attribute's value. When called with arguments, the attribute is set to this value. Keywords: accessor, getter, setter, overload, read/only attribute, unique value, default argument """ omitted=[] # omitted contains an exclusive unique value class Person: def __init__(self, givenName, name): self._givenName=givenName self._name=name # read write accessor def givenName(self, value=omitted): if value is not omitted: # check for exclusive unique value self._givenName=value return self._givenName # read only accessor def name(self): return self._name print ("The special unique value has the id %s. No other Python object is " "identical (unsing the 'is' operator) to it.\n" % id(omitted)) p=Person('Ulrich', 'Hoffmann') print p.givenName(), p.name() # Read attributes through accessors print p.givenName('Ulrich Ernst') # Write attribute through accessor print p.givenName(), p.name() try: print p.name("") # Read/only accessor except TypeError: print "I cannot set the value of 'name' in object %s. This is expected." % p