Class inheritance testing
I would change your Character.__init__ to this:

def __init__(self, **kwargs):
    for key, value in kwargs.iteritems():
        setattr(self, key, value)


It isn't any shorter but it's more clear what's happening.
For one thing, i is not a descriptive name by any means.  For another thing, you might as well iterate through key-value pairs1 rather than just keys.  You use both; why not iterate through both?

I would also change your other __init__ methods.  If Character.__init__ sets attributes, why not take advantage of it?  Instead of self.canRange = ..., add canRange=... to the arguments to Character.__init__.

That brings me to something else.  PEP 8, the Python style guide, says this about instance variables (such as canRange):


  Use the function naming rules: lowercase with words separated by underscores as necessary to improve readability.





1 You could also do self.__dict__.update(kwargs) but that isn't recommended and seems hackish to me anyway.