I think I might be missing your point. Instead of calling super().foo() why not use explicit super(self.__class__, self).foo()? Afaik super uses some runtime binding to set the parameters so if one's skipping that execution due to monkey patching then one has to use explicit form.