That's a pretty vaste question indeed. For something like that to work fine, you have first to think about data.
The system you want to build is based on lists of things (list of object, list of attributs per object, list of available character, list of attributs per character, etc.)
So first you have to think how you will put that together.
In my inventory, I don't take the character into account at all. (That wasn't asked).
But I have a list of object system with a list of attributs per object.
You can read my capx again knowing that :
1/ The list of object is just formed by all the animation frame of the 'item' sprite.
2/ The list of attributs per object is contained in a "coma separated values" (CSV) string I parse. The string follow the same format for all kind of object ("type,price,attack,defense,power").
3/ The association between each line of the string and each object in te 'item' sprite is implicit. It's just in the same order.
4/ I load these attribute in instances variable of each 'item' on creation. This way you can easily make them evolve. The list in the string is basically just the default values.
You pretty much can use the same system for characters.
Same sprite for all your character but you can build different animation for each one like : "Geo_Idle, Geo_Walk, DarkS_Idle, DarkS_Walk"
You can then have an instance variable called 'name' that identify each instance and always call animation like that:
Character.name&"_Idle"
Character.name&"_Walk"
The same way as items you can have a string with a list of default attributes like "job" or "race" and some items will be available depending on these attributes.
In the end, you can also use my slot system to check if an item is allowed in some slot or not. You just have to add some other condition check by looking at your characters attributes like I just said.
Anyway plan things beforehand. The thing to avoid in this kind of project is code repetition. When you find yourself copypasting same exact stuff for many different object, it means you didn't plan things well, and you probably should group these object in the same sprite or at least the same family (now that we have that).
I know that my explanation might not be enough but as I said it's a pretty vaste subject that revolve around UI programming and data handling and I can't really do it for you. (: