i'm confused which part that doesn't make sense? this is my 2nd attempt to py, the 1st was on april this year, it was just a month, i'm afraid i haven't got the fundamentals right yet. so i'm gonna lay out how i got to this conclusion, CMIIW
**explanation of feeling (0) on my 1st post** to me, descriptor is a particular kind of delegation, it takes the job of coding the delegation by having a contract with programmers that the tree meta operations (get, set, del) on attr are delegated to the obj that is bound to the attr are we agree that descriptor is a kind of delegation? the mechanism that makes descriptor works is in __getattribute__, __setattr__, __delattr__ of 'object' & 'type' now, if i want a single descriptor obj to be delegated to multiple tasks, i can't do it since __get__ doesn't get info that can be used to determine which task to do i must have diff descriptor obj for each task class Helper: def __init__(self, name): self.name = name def __get__(self, ins, cls): if self.name == 'task0': ... elif self.name == 'task1': ... else: ... class a: task0 = Helper('task0') task1 = Helper('task1') if __get__ receives the name, then i could do class Helper: def __get__(self, ins, cls, name): ... class a: task0 = task1 = Helper() but after explaining this, i have more doubt on my own stmt in the 1st post "not passing name strengthens the coupling between delegator & delegate". now i think it's more likely the opposite, it weakens the coupling at the expense of more objs. moreover, is it wrong to justify that descriptor is a kind of delegation? my ego speaks: - i think, if the name is passed on, programmers can choose to use it or not (i don't know if it brokes any py principle, i only know KISS) - i realize that using name as the info that descriptors use to determine which task to do, is going to strongly couple the descriptor & the classes that use it, meaning that the descriptor & the user classes must agree on attr names to be used. a simple solution to it is by mapping attr names & names used in the descriptor class Helper: def __init__(self, name_map=None): self.name_map = name_map def __get__(self, ins, cls, name): if self.name_map is None: if name == 'task0': ... ... else: if self.name_map[name] == 'task0': ... ... class a: do_this = do_that = Helper({'do_this':'task0', 'do_that':'task1'}) finally, like all shared things, shared descriptor objs require more effort for synchronization -- http://mail.python.org/mailman/listinfo/python-list