Making Class and Instance dict be a plain HashMap instead of an actual Dict prevents adding keys to the class/instance __dict__. The assumption of string keys is also incorrect:
class A:
pass
a = A()
a.__dict__[42] = 'val'
print(a.__dict__) # cpython: {42: 'val'}