from string import upper

class Record:
    def __init__(self, args={}):                      # keys not ordered...
        for field in self.fields.keys(): 
            setattr(self, field, self.fields[field])  # start with defaults
        for key in args.keys(): 
            setattr(self, key, args[key])             # add from dictionary
    def basic(self):
        result = []
        for field in self.fields.keys():                  
            result.append((upper(field), getattr(self, field)))
        return result    
    def extra(self):
        result = []
        for attr in self.__dict__.keys():
            if not self.fields.has_key(attr):
                result.append(upper(attr), getattr(self, attr)) 
        return result
    def info(self):
        return (self.basic(), self.extra())        # collect all fields

class Person(Record):
    fields = { 'name':'', 'job':'', 'pay':0 }

class Student(Record):
    fields = { 'name':'', 'id':0, 'year':0, 'age':20 }
