I checked my code today and your suggestion did fix the problem. I used your second idea of having the default class attributes with individual instance attributes. I ran into one problem where I kept getting the error
" File "\\user1\jacksocl\Python_stuff\CMRPG\CharCreation.py", line 262, in __init__ self.intel = Character.attrib_dict["intel"] AttributeError: class Character has no attribute 'attrib_dict' Script terminated." but I figured out it was because I was calling the Character class expressly in the Marine subclass when I wanted to rename a dictionary value. It was just a simple remedy of changing the called dictionary from "Character.attrib_dict" to "self.attrib_dict". It gets so confusing keeping track of all things OOP items, though it's quite a bit worse learning it in C++. Thanks for your help. Steven D'Aprano wrote: > On Sun, 09 Jul 2006 04:24:01 +0000, crystalattice wrote: > > > I've finally figured out the basics of OOP; I've created a basic character > > creation class for my game and it works reasonably well. Now that I'm > > trying to build a subclass that has methods to determine the rank of a > > character but I keep getting errors. > > > > I want to "redefine" some attributes from the base class so I can use them > > to help determine the rank. However, I get the error that my base class > > doesn't have the dictionary that I want to use. I've tried several things > > to correct it but they don't work (the base class is called "Character" > > and the subclass is called "Marine"): > > Without seeing your class definitions, it is hard to tell what you are > doing, but I'm going to take a guess: you're defining attributes in the > instance instead of the class. > > E.g. > > class Character(): > def __init__(self): > self.attrib_dict = {} > > attrib_dict is now an instance attribute. Every instance will have one, > but the class doesn't. > > I'm thinking you probably want something like this: > > class Character(): > attrib_dict = {} > def __init__(self): > pass > > Now attrib_dict is an attribute of the class. However, it also means that > all instances will share the same values! Here's one possible solution to > that: > > class Character(): > default_attribs = {} > def __init__(self): > self.attribs = self.default_attribs.copy() > > Now there is one copy of default character attributes, shared by the class > and all it's instances, plus each instance has it's own unique set of > values which can be modified without affecting the defaults. > > > Hope this clears things up for you. > > > -- > Steven. -- http://mail.python.org/mailman/listinfo/python-list