Dynamic objects
Larry Bates
larry.bates at websafe.com
Thu Aug 17 15:51:10 EDT 2006
Mark Shewfelt wrote:
> Hello,
>
> I have implemented a series of classes representing a Building, its
> respective Equipment, and then various Components of that equipment
> like so (as you'll be able to tell, I'm a newbie):
>
> class Building:
> equipment = {}
> def AddEquipment( name, data ):
> equipment[ name ] = Equipment( data )
>
> class Equipment:
> components = {}
> def AddComponent( name, data ):
> components[ name ] = Component( data )
>
> class Component:
> data = ""
>
> These classes are used like so:
>
> test = Building()
> test.AddEquipment( "equipment 1", data )
> test.AddEquipment( "equipment 2", data )
> test.equipment["equipment 1"].AddComponent( "component 1", data )
> test.equipment["equipment 1"].AddComponent( "component 2", data )
> test.equipment["equipment 2"].AddComponent( "component 3", data )
>
> But it appears as though the instance of "equipment 1" has ALL of the
> components in its components dictionary. I was hoping that the
> test.equipment["equipment 1"].components dictionary would only have
> those components that were assigned to "equipment 1".
>
> I have implemented __init__ functions for all of the classes, but all
> they do is initialize some data that I haven't shown here.
>
> I think I'm trying to use a C++ way of doing this (without the new
> operator) so if anyone would be so kind as to help with the Python way
> of doing this sort of thing I will be eternally grateful.
>
> Cheers,
>
> Mark Shewfelt
>
With the way you defined Building multiple buildings would share
equipment dictionary as it is defined as a class variable and you
want an instance variable (I'm pretty sure). You probably wanted
(not tested):
class Building:
def __init__(self):
self.equipment = {}
def AddEquipment(name, data):
equipment[name]=Equipment(data)
same for Equipment class and Component class.
class Equipment:
def __init__(self):
self.components={}
def AddComponent(name, data):
components[name]=Component(data)
class Component:
def __init__(self, data)
self.data=data
-Larry Bates
More information about the Python-list
mailing list