is extending an object considered acceptable usage?

Larry Bates lbates at syscononline.com
Fri Jan 28 09:49:49 EST 2005


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.



More information about the Python-list mailing list