also support __setattr__