It feels a little sketchy to have one instance method that people can overwrite as part of the official public API, when most aren't supposed to be overwritten.  QuickOpen uses a similar pattern as here.  Though I guess we could have an arg to the constructor and what we do with it under the hood is overwrite the public member function...