I also come from a low level background (assembly and c) and I struggled with object oriented programming.  People talk about procedural languages or designs and object oriented languages or designs.  But after the interpreter or compiler runs the byte or machine code is procedural always.  Object oriented code changes the structure of how the code is designed.  Its merely a convenient way to logically group similar functions and variables.  This is done in C via header and implementation files.  Classes provide a simple syntax normally for associating many variables and functions inside which generally achieve a common goal.  This class becomes an object that is manipulatable.
<br><br>For example one might want to make a class to centralize their file operations in a particular program.  For instance a logger class for keeping track of execution.<br><br>class logger:<br>   file = None<br>   def __init__(self):
<br>       #code first executed on instantiation of the object<br>       #you must make an instance of a class otherwise its a template<br>       file = open('programx.log', 'w')<br>       <br>   def write_to_log(self, message):
<br>       #self is the instance of the class you made its used to internally reference those variables contained within<br>       #<br>       self.file.write(message)<br>   def close_log(self):<br>       self.file.close()
<br><br>The class allows for internal referencing of variables so that the variables are global to all methods or functions.  Like the for example the<br>file handle to write to.<br><br>OOP is merely an organizational structure that can only be grasped appropriately by repeated use.
<br><br><br><br><br>