If you will be swapping roles often perhaps consider each player simply has a list (not in the tlist meaning) of legal abilities and actions, and some fields containing their class name/appearance etc.
Then not only can you change easily you can also customize abilities. If you want there to be "concrete" class types and not allow the player customization (too much customization can be a bad thing!) then simply be very strict about what abilities can be used with which and the player will never know there aren't distinct class types running under the hood.
In my opinion you should extend types when they have very different natures and behaviours. Wizard and warrior might sound different but they are both player types with the ability to walk etc. As an example of what I mean, extending an enemy type into goblin, mage etc wouldn't be a good idea in my opinion. Extending into walkingmonster, flyingmonster etc would.
Then not only can you change easily you can also customize abilities. If you want there to be "concrete" class types and not allow the player customization (too much customization can be a bad thing!) then simply be very strict about what abilities can be used with which and the player will never know there aren't distinct class types running under the hood.
In my opinion you should extend types when they have very different natures and behaviours. Wizard and warrior might sound different but they are both player types with the ability to walk etc. As an example of what I mean, extending an enemy type into goblin, mage etc wouldn't be a good idea in my opinion. Extending into walkingmonster, flyingmonster etc would.