__qualname__ gives more complete information than __name__ and therefore can be more helpful in debugging, for example.
Example:
>>> def f(): pass
... class A:
... def f(self): pass
... class A:
... def f(self): pass
...
>>> # __name__ is not showing the path, so these functions look equal
>>> f.__name__
'f'
>>> A.f.__name__
'f'
>>> A.A.f.__name__
'f'
>>> # And these classes looks equal
>>> A.__name__
'A'
>>> A.A.__name__
'A'
>>>
>>> # __qualname__ shows the path, so these functions are distinguishable
>>> f.__qualname__
'f'
>>> A.f.__qualname__
'A.f'
>>> A.A.f.__qualname__
'A.A.f'
>>> # And these classes are distinguishable
>>> A.__qualname__
'A'
>>> A.A.__qualname__
'A.A'
__qualname__ is also adding some backwards compatibility with Python 2’s .im_class.
More details in the rationale for PEP 3155