Sorry, the comment above was just about the following lines:

         if injected_props:
              self.__class__ = type('Array', (Array,), injected_props)

I don't like putting this information into the class.  Generally injecting properties seems ok to me.  I totally support having `__int__` on an array of integers and not on an array of floats.  I don't support screwing with `self.__class__`.  Or at least I don't know what this buys us.

Oh wait, this is how you're injecting things.  Sorry, I just got it.  I guess the method that I was going for was that you would create a new object of the straight Array class.  Then you would monkeypatch that object (`obj.__int__ = int_function`).  Probably the method that you're doing is not less ugly than this.  I'll drop my previous comment until something breaks (if ever).