You might want to look into Object-Oriented Design. Python has good support for that.
Thick books are written about this which can be scary when you are new, but the main principles are fairly easy.
The main point is just that you identify what kind of objects you are working with. You don't say what kind of game you are thinking about, but things like Player, Monster, Item, Equipment, Weapon, Armour and so on are typical objects.
If you want different game types, you will probably want a Game object that takes care of victory condition and such. Perhaps a Map object too?
Sometimes it is not clear if something deserves to be an object or not, e.g. damage. If you don't make damage an object the code will be simpler, but making it an object makes it easier to customize.
Subclassing: Both Weapons and Armours are Equipment. Equipments are Items. There are probably other types of Items. You will probably find it useful to define a class Combatant that both Players and Monsters are subclasses of.
The idea is that for example Weapons will have many things in common with all other types of Items, they have a weight, size and other properties like that.
So, subclassing gives you a way of saying that "Weapons are like other Items, but in addition you can wield them, they affect the damage you do, etc etc."
Subclassing also lets your mod builders say "My new type of weapon is just like the standard weapons except that ..."
Then you have to decide which object is responsible for what. This is not as easy as it seems and you should do some thinking about it. Making the wrong choices will not affect the basic game much, but will make it harder to customize.
As long as you are just tinkering on your own you can change things around but the moment you release something to the public, making changes becomes much harder! People will make mods that depend on things being just like they are now. Even bugs. People will write mods that depends on bugs staying in the code. If you change things, those mods will break and lynch mobs will appear at your house.
A Player wielding a Weapon attacks a Monster wearing multiple Armours.
This takes place in a particular Game mode and on a certain Map.
Both Combatant may have Skills like Critical Hit and Dodge.
Now, which object is responsible for what?
There is not one right answer to this. A lot depends on what kind of customization you want to allow.
If you never call an object (e.g. the Map), that object cannot change the attack in any way.
After making all these decisions, document them. Write a "Modders manual" that lists exactly what moddable methods each object has, what parameters they take, what they should return, and so on and on and on...