# an enhanced person class
# may be used with previously-stored Person objects

class Person:
    def __init__(self, name = '', job = '', pay = 0):
        self.name = name
        self.job  = job
        self.pay  = pay                   # real instance data

    def __getattr__(self, name):          # on undefined names
        if name == 'tax':
            return self.pay * .30         # a computed member
        else:
            raise AttributeError          # others are errors 

    def __repr__(self):                   # for printing myself
        return 'Person=>%s' % self.name 

    def basic(self):
        return self.name, self.job, self.pay, self.tax

    def extra(self):                      # collect unique members
        result = []
        for field in self.__dict__.keys():
            if field not in ['name', 'job', 'pay']:
                result.append((field, getattr(self,field)))
        return result

    def info(self): return self.basic(), self.extra()
