Steven Bethard <[EMAIL PROTECTED]> wrote:I don't know what the right solution is here... I wonder if I should
write a classmethod-style descriptor that disallows the calling of a function from an instance? Or maybe I should just document that the classmethods should only be called from the class? Hmm...
Another approach is to add a few "reserved words" to the ones Python itself would reject in the initialization. Just you cannot do:
b = Bunch(continue=23)
you may choose to forbid using getDict=42 - if you do that you probably want to forbid any magicname too, since e.g.
b = Bunch(__dict__=99)
can't work ``right'' no matter what, while setting e.g. __deepcopy__ similarly might confuse any copy.deepcopy(b), etc, etc.
Yeah, I thought about this. I certainly don't have any problem with disallowing magic names. For other names, I'm less certain...
How do you feel about getDict and setDict also being classmethods?
Uh? I want to get or set the dict of a specific instance -- not those of the whole class. How would you design them as classmethods...?
The classmethod would have to be called with an instance, e.g.:
class Bunch(object): @classmethod def getDict(cls, self): return self.__dict__
@classmethod def setDict(cls, self, dct): self.__dict__ = dct
Of course, these could be staticmethods instead since they don't need the class, but the point is that you should be calling them like:
adict = Bunch.getDict(bunch)
or
Bunch.setDict(bunch, adict)
The complications with attribute hiding is one of main reasons I've tried to minimize the number of methods associated with Bunch...
Steve -- http://mail.python.org/mailman/listinfo/python-list