This little program just doesn't do what I think it should and I cannot understand what the problem is.
I'm running Python 2.4 on Windoze XP.
It contains an album class, an album collection class, a track class, and a track collection class.
It seems confused about which instance is which -- when it says Albums.Tracks.C ount() the two instances are unique, but when it says Album.Tracks you get both instances combined. It's as if all accessors in Python are equal, but some accessors are more equal than others :-)
Here's the code. It is the smallest example I could make to demonstrate this behavior.
[CODE=python]
# Making a nested set of objects
# A track
class TrackClass:
def __init__(self, ID, Title):
self.ID = ID
self.Title = Title
# A collection of Tracks
class TracksClass:
Items = []
ItemCount = 0
def Add(self, ID, Title):
self.Items.appe nd(TrackClass(I D,Title))
self.ItemCount += 1
def Count(self): return self.ItemCount
def __getitem__(sel f,ordinal): return self.Items[ordinal]
class AlbumClass:
def __init__(self,I D,Title):
self.ID = ID
self.Title = Title
self.Tracks = TracksClass()
# A collection of Albums
class AlbumsClass:
Items = []
ItemCount = 0
def Add(self,ID,Tit le):
self.Items.appe nd(AlbumClass(I D,Title))
self.ItemCount += 1
def __getitem__(sel f,ordinal): return self.Items[ordinal]
def Count(self) : return self.ItemCount
Albums = AlbumsClass()
Albums.Add(ID = 1, Title = "First Album")
Albums[0].Tracks.Add(ID = 1, Title = "First Album First Track")
Albums[0].Tracks.Add(ID = 2, Title = "First Album Second Track")
Albums.Add(ID = 2, Title = "Second Album")
Albums[1].Tracks.Add(ID = 3, Title = "Second Album First Track")
Albums[1].Tracks.Add(ID = 4, Title = "Second Album Second Track")
Albums[1].Tracks.Add(ID = 5, Title = "Second Album Third Track")
print "This does not print the expected results"
for Album in Albums:
print "Album (%i) %s has %i tracks" % (Album.ID, Album.Title, Album.Tracks.Co unt())
for Track in Album.Tracks:
print " Track: (%i) %s" % (Track.ID, Track.Title)
print ""[/CODE]
I'm running Python 2.4 on Windoze XP.
It contains an album class, an album collection class, a track class, and a track collection class.
It seems confused about which instance is which -- when it says Albums.Tracks.C ount() the two instances are unique, but when it says Album.Tracks you get both instances combined. It's as if all accessors in Python are equal, but some accessors are more equal than others :-)
Here's the code. It is the smallest example I could make to demonstrate this behavior.
[CODE=python]
# Making a nested set of objects
# A track
class TrackClass:
def __init__(self, ID, Title):
self.ID = ID
self.Title = Title
# A collection of Tracks
class TracksClass:
Items = []
ItemCount = 0
def Add(self, ID, Title):
self.Items.appe nd(TrackClass(I D,Title))
self.ItemCount += 1
def Count(self): return self.ItemCount
def __getitem__(sel f,ordinal): return self.Items[ordinal]
class AlbumClass:
def __init__(self,I D,Title):
self.ID = ID
self.Title = Title
self.Tracks = TracksClass()
# A collection of Albums
class AlbumsClass:
Items = []
ItemCount = 0
def Add(self,ID,Tit le):
self.Items.appe nd(AlbumClass(I D,Title))
self.ItemCount += 1
def __getitem__(sel f,ordinal): return self.Items[ordinal]
def Count(self) : return self.ItemCount
Albums = AlbumsClass()
Albums.Add(ID = 1, Title = "First Album")
Albums[0].Tracks.Add(ID = 1, Title = "First Album First Track")
Albums[0].Tracks.Add(ID = 2, Title = "First Album Second Track")
Albums.Add(ID = 2, Title = "Second Album")
Albums[1].Tracks.Add(ID = 3, Title = "Second Album First Track")
Albums[1].Tracks.Add(ID = 4, Title = "Second Album Second Track")
Albums[1].Tracks.Add(ID = 5, Title = "Second Album Third Track")
print "This does not print the expected results"
for Album in Albums:
print "Album (%i) %s has %i tracks" % (Album.ID, Album.Title, Album.Tracks.Co unt())
for Track in Album.Tracks:
print " Track: (%i) %s" % (Track.ID, Track.Title)
print ""[/CODE]
Comment