Itai Tavor wrote at 2003-7-7 20:00 +1000:
I got a folderish python product with the following method:
def SKU(self): """ Return our SKU for the catalog """ return self.sku
The problem is that when objects contained in instances of this product are cataloged, they acquire the SKU method, so they also get the sku property. That is bad. So what I need is something like this:
def SKU(self): """ Return our SKU for the catalog """ if (I was acquired): return None else: return self.sku
But I can't figure out how to do that. Help?
I fear this is impossible and would not be the right way either. The right way (in my view) would be to make indexes manageable and allow to set 3 boolean properties: ALLOW_ACQUISITION= 1 # to indicate that attributes may be acquired HIDE_EXCEPTIONS= 1 # silently ignore (most) exceptions during calls ALLOW_CALL= 1 # indicate that attributes are called when callable I have implemented an "IndexBase" class that determines the value of object "obj" for index "id" in the following way: def getValue(self,obj,default= None): '''the value of *obj* with respect to this index.''' marker= self # determine base value id= self.id if self.ALLOW_ACQUISITION: val= getattr(obj,id,default) elif hasattr(aq_base(obj), id): val= getattr(obj,id) else: val= default if safe_callable(val): if not self.ALLOW_CALL: return default try: val= val() except EXCEPTIONS_NOT_TO_BE_CAUGHT: raise except: if self.HIDE_EXCEPTIONS: return default raise return val Dieter