Inheritance error: class Foo has no attribute "bar"

crystalattice crystalattice at yahoo.com
Tue Jul 11 21:18:55 EDT 2006


On Sun, 09 Jul 2006 03:51:56 -1000, Steven D'Aprano  
<steve at REMOVETHIScyber.com.au> 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.
>
>
Yes, I believe your right (I left my code at work so I can't verify  
directly).  I did initialize attrib_dict in the __init__method, not  
outside it as a class member.  I'll try your suggestion and see what  
happens.  Thanks.


-- 
Python-based online RPG in development based on the Colonial Marines from  
"Aliens": http://www.colonialmarinesrpg.com

Using Opera's revolutionary e-mail client: http://www.opera.com/mail/



More information about the Python-list mailing list