Unable to apply materials to the entire mesh object correctly
Programming languages are very literal and do exactly as they are written in the order that they are written, with python the formatting (line indentation) also makes a difference.

Assuming the code you show was pasted with the same formatting as the script you are running, you start by looping over every object and selecting it and making it active. bpy.ops.object.select_all(action='SELECT') will get the same result.

When the loop is finished you deselect all objects, select one object, set self.model to the last object in the loop then create and assign a material to the one object.

You could indent the lines that make the material so that it becomes part of the loop so that you get a new material created for each object. Another approach is to create the material first and then assign the same material to each object in a loop.

mat = bpy.data.materials.new('colored')
mat.diffuse_color = [0., 191./255, 255./255]
mat.specular_intensity = 0.3

bpy.ops.object.select_all(action='SELECT')
for ob in bpy.context.selected_objects:
    if ob.type == 'MESH':
        ob.active_material = mat