That's a level of sophistication greater than what I need, but it would be cool for a magic-based game. Everything that blocks the player should also block enemies and bullets. I think I can handle this well using pygame's sprite groups (sprites are basically image containers with built-in movement and update routines, and groups are ways of categorizing sprites for simultaneous processing). Plus, I can make sprites belong to multiple groups, so an enemy, a wall, and an item could be in the same group for drawing to the screen, but only the enemy and the wall would be in the group for collision detection. Right now I'm playing around with drawing methods and seeing which ones are going to work best, since pygame has a lot of features I don't think I'll need to touch.
EDIT:
Someone check my logic on this one. If I make a general "item" object, I could make a "weapon" object that inherits all of the methods of the "item" object, and then I could make a "weapon design" object to handle weapon schematics. Then, the "weapon" object could contain a "weapon design" object that it would know to access to look up all its properties, and it would make linking a schematic to an actual weapon a matter of simply passing the "weapon design" to the appropriate creation code for a given "weapon." Sound sane? I think I just keep getting confused between object definitions and instances of objects.
EDIT2:
Ampersand now moving around screen. Yay? It all needs to be rewritten anyway. I'm a little concerned that pygame's Sprite class doesn't allow for easy persistence. I never liked the roguelikes that suddenly reinitialize everything about a level just because I stepped in and out a door. Eventually I'll want to clear that info from memory, but it should stick around for a while. Also, sprites seem like a potentially bad way to handle items, since they can either be in an inventory, worn, or dropped on the ground. It might not be too difficult to switch from worn->inventory->on ground types of items, but I foresee an assload of bugs. A more consistent method would make giving enemies inventories a smaller hurdle.