Following the documentation at: https://docs.blender.org/api/blender_python_api_2_76_2/bge.types.KX_GameObject.html I can extend a game object with:

    class Mine( types.KX_GameObject ):

        def __init__( self, old_owner):

             #stuff

    def activate( controller ): # Called from Controller

        Mine( controller.owner )

But I'm missing what's doing the magic here. Somehow the controller not gets passed as second argument to __init__ but as first and the game object is internally (?) exchanged (?) with mine. 

So how is this working exactly? Is there some blender-foo or is this something Python can do for me which I'm not aware of?