Just so you know, with inheritance the subclass has the same functions as the base class. Which is to say, you don't need to call (from the weapon class):
Equipable.equip(self, target)
You can actually just call:
self.equip(target)
Calling it by class is normally only done if you are using multiple inheritance and accidentally gave two of the base classes conflicting functions with the same name, or you are for some reason calling it from outside the class and its subclasses.
By the way, when self is passed as an argument to a function it isn't actually calling itself, it is just passing itself as reference. Remember how I mentioned you could call a class function from outside a class? This is what makes that possible. Looking back at the above function, you might notice that there are two arguments in the first but only one in the second. When calling from outside, you need to provide the object, but by calling from the object (in this case 'self'), it implicitly passes itself as the first argument. So technically, both have the same two arguments.
That's why self is a must thing, as the object itself will always be the first argument when called normally. If you really want, there are ways to pass the object reference in other positions, but those are outside the scope of an itch.io comment and have no benefit other than novelty (and some downright masochistic downsides).
By the way, self is just a variable name. You could alter:
InventoryItem.__init__(self,name,...):
to:
InventoryItem.__init__(litterallyAnything,name,...)
but please never do that. It really hurts code readability, and you would also have to change
self.name = name
to
litterallyAnything.name = name
and etc.