class desc: def __set_name__(self, cls, name): print("set name", name, "in", cls.__name__) cls.foo = 1 # This line is important. It modifies the cls __dict__ class Class: a = desc() b = desc() c = desc() d = desc() e = desc() # Expected output: # set name a in Class # set name b in Class # set name c in Class # set name d in Class # set name e in Class # Actual output might depend on various factors. # But you can see that some "set name" lines are not printed, because the # corresponding __set_name__ is not called. # You might have to comment out some of the "x = desc()" lines to see the bug. # You might even have to add more lines to see the bug.