I totally agree that reading it directly out of ``__dict__`` isn't ideal, and I like the idea of allowing subclasses to contribute their own unique values via an overridable method. But I also didn't want to add any new public API methods or properties to a simple bug fix as that seemed to raise the bar for acceptance quite a bit. So I just made the simplest self-contained change that made the tests pass.

I'm happy to take this whatever direction you'd like. Adding a ``_signature`` method (since it's called from an underscore method it should also be named with an underscore?) isn't much work since there's a very simple inheritance hierarchy.