'open', 'closed', 'locked'. Door starts closed; open(), close(), lock(), unlock() mutate state but illegal moves raise ValueError (can't open a locked door, can't lock an open one, unlock only works when locked). Each method returns the new state.d = Door(); d.lock(); d.open()
ValueError after 'locked'
Opening a locked door is illegal.
Door().open()
'open'
A closed door opens fine.
Guard each method with a state check.
Return self.state at the end of each.