Why weakref.WeakMethod used hash of class, but non hash of method?

In this code, I use weakref.WeakMethod for creation autodelete listeners of observable object. And if listeners is method of unhashable obejct, this let to TypeError: unhashable type, but why WeakMethod don’t use hash of method? After all, the methods of different objects have different hash even objects unhashable.

import weakref

class Observable:
    def __init__(self):
        self._listeners = set()

    def register(self, listener):
        self._listeners.add(listener)


class A:
    def __init__(self, obs: Observable):
        weak_listener = weakref.WeakMethod(self._listener)
        obs.register(weak_listener)

    def _listener(self):
        pass


class B(list): # Unhashable type, list only for example
    def __init__(self, obs: Observable):
        super().__init__()
        weak_listener = weakref.WeakMethod(self._listener)
        obs.register(weak_listener)

    def _listener(self):
        pass


class C(list): # Unhashable type, list only for example add hash for example
    def __init__(self, obs: Observable):
        super().__init__()
        weak_listener = weakref.WeakMethod(self._listener)
        obs.register(weak_listener)

    def _listener(self):
        pass

    def __hash__(self):
        return hash((self._listener,))


if __name__ == '__main__':
    obs = Observable()
    a = A(obs) # Correct

    b = B(obs) # TypeError: unhashable type: 'B'

    c = C(obs) # Correct