When I want to do what I think you are asking, I create
an iterator in that returns a category item each time
the .next method is called.  That way you can write.

ITEM=item(<args>)
.
.
.
for CATEGORY in ITEM:
    <do anything>


in my item class:

class item:
    def __init__(self, <other args>):
        self.CATEGORIES=[]
        self.next_index=0       # Index point for next method

    def __iter__(self):
        return self

    def next(self):
        #
        # Try to get the next route
        #
        try: CATEGORY=self.CATEGORIES[self.next_index]
        except:
            self.next_index=0
            raise StopIteration
        #
        # Increment the index pointer for the next call
        #
        self.next_index+=1
        return CATEGORY

I had one project where these were nested 5-6 deep
and the resultant code reads beautifully.

Larry Bates


mike wrote:

i have an Item which belongs to a Category, so Item has:

- item.categoryId, the database primary key of its Category

- item.category, a reference to its Category. this null unless i need a reference from item to its Category object, in which case i call setCategory(category)

sometimes i want a list of categories, and from each i want to be able to access a list of its items. in this case is it considered acceptable to just create a list of those items and assign it as a property of their category? eg:

  category.items = listOfItems

this packages everything up into a hierarchy and is more convenient to use, especially in Cheetah templates, but requries modifying the structure of the object, which bothers me (probably for some subconscious java-related reason).

the alternative might be to create a dictionary that keys the lists of items on their category:

  items = {}
  items[category.id] = listOfItems

this feels less "controversial" to me, but requires extra objects and house-keeping.


thanks - just curious if there were arguments one way or the other.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to