By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,626 Members | 2,169 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,626 IT Pros & Developers. It's quick & easy.

Dynamic objects

P: n/a
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

Aug 17 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Tim


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

I don't see how your examples could work, helps if you post the actual code.
Try these classes, I think they accomplish what your trying to do.

class Building:
def __init__(self, data = ''):
self.data = data
self.equipment = {}
def AddEquipment(self, name, data ):
self.equipment[ name ] = Equipment( data )

class Equipment:
def __init__(self, data = ''):
self.data = data
self.components = {}
def AddComponent(self, name, data ):
self.components[ name ] = Component( data )

class Component:
def __init__(self, data):
self.data = data

Aug 17 '06 #2

P: n/a
Thanks a lot Tim!

My __init__ functions didn't set the dictionaries like you did below
(e.g. self.equipment = {} ).

Newbie mistake - won't make that one again.

Thanks again,

Mark
Tim wrote:
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
I don't see how your examples could work, helps if you post the actual code.
Try these classes, I think they accomplish what your trying to do.

class Building:
def __init__(self, data = ''):
self.data = data
self.equipment = {}
def AddEquipment(self, name, data ):
self.equipment[ name ] = Equipment( data )

class Equipment:
def __init__(self, data = ''):
self.data = data
self.components = {}
def AddComponent(self, name, data ):
self.components[ name ] = Component( data )

class Component:
def __init__(self, data):
self.data = data
Aug 17 '06 #3

P: n/a
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
Aug 17 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.