Laszlo Zsolt Nagy <[EMAIL PROTECTED]> writes: > Mike Meyer wrote: >>Laszlo Zsolt Nagy <[EMAIL PROTECTED]> writes: >>>Is it possible to tell, which instance was used to call the >>>classmethod that is currently running? >>Ok, I read through what got to my nntp server, and I'm still >>completely confused. >>A class method isn't necessarilry called by an instance. That's why >>it's a class method. What should happen in that case? > Here is the answer (an example): > > @ClassOrInstanceMethod > def process_create_table(cls_or_self,tabledef,processor): > """Process the CREATE TABLE command. > > @param tabledef: a L{TableDefinition} instance. > @param processor: a L{SQLProcessor} instance.""" > hname = cls_or_self.hashident(tabledef.name) > if (isinstance(cls_or_self,type)) or (not > cls_or_self.istableexists(hname)): > processor.addline("create table %s \n ("% hname) > for field in tabledef.fields: > if not (field() is None): > cls_or_self.process_create_table_field(field(),processor) > processor.addline(",") > processor.truncate_last_comma() > processor.addline("") > processor.addline(")") > cls_or_self.addtablespaceclause(tabledef,processor) > processor.processbuffer()
I assume that hashident, istableexists, process_create_table_field and addtablespaceclause all do this screwy ClassOrInstanceMethod thing? > There are two reasons why I do not want to create two methods (one > instance and one class method). > > 1. If you look the above pattern, it is clear that the method does the > same thing, just there are some conditions when I call it with an > instance. I do not want to call "process_create_table_with_class" and > "process_create_table_with_instance", because the name of the method > should reflect what it does primarily. (BTW, I also looked at > multimethods, but they are not exactly for this kind of problem.) Well, I'd call them process_create_table_for_instance and create_table_for_class, but that's just me. > 2. The pattern above makes it clear that I just can't easily split the > method into elementary parts. Steven wrote this pattern: I didn't say it would be easy - just well understood, and on seeing this, maybe not that. On the other hand, being hard doesn't mean it's not worth doing. > But I cannot do this, because primarily I do class stuff, and in some > cases, I can make use of an instance (but do not require it). > Comments welcome Proposing an alternative design is pretty much impossible, because I don't know how the class hierarchy fits together. If there isn't much of a hierarchy, maybe you'd be better off with an ADT model than an object model? <mike -- Mike Meyer <[EMAIL PROTECTED]> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. -- http://mail.python.org/mailman/listinfo/python-list