1. Yes unset is necessary. We do not use 'magic values' such as setting a property to 'None'. We also need to allow a property to be empty but present. The unset command removed the property. All of this is independent of how the API actually is implemented, we want to present the same interface to the user.
2. A property name that overlaps an attribute name is a bad idea, but _some_ user set it to begin with. This may be one instance where we are giving the users the ability to hurt themselves by doing such things, but that is not always the wrong thing to do. In other places we restrict property names from duplicating known attributes. I am not sure we should do that and we'll need to follow up and make things consistent.
To answer the questions:
1. Yes unset is necessary. We do not use 'magic values' such as setting a property to 'None'. We also need to allow a property to be empty but present. The unset command removed the property. All of this is independent of how the API actually is implemented, we want to present the same interface to the user.
2. A property name that overlaps an attribute name is a bad idea, but _some_ user set it to begin with. This may be one instance where we are giving the users the ability to hurt themselves by doing such things, but that is not always the wrong thing to do. In other places we restrict property names from duplicating known attributes. I am not sure we should do that and we'll need to follow up and make things consistent.