George Sakkis wrote: > John Machin wrote: > > Bruno Desthuilliers wrote: > > > > > <my humble opinion> > > > Python is dynamic, and fighting against the language is IMHO a really > > > bad idea. The only places where theres a real need for this kind of > > > stuff are when dealing with the "outside world" (IOW : inputs and > > > outputs). And then packages like formencode can do much more than mere > > > type-checking > > > </my humble opinion> > > > > Agreed. The worst case I have seen: > > > > An elaborate decorator (similar to the OP's) laboriously checks arg > > types. That's IMHO not "consenting adults" territory. But it gets a > > whole lot worse when it's applied to a method whose body is like this: > > > > if isinstance(.... > > action_for_type1(... > > # big snip > > elif isinstance(... > > action_typeN( ... > > # no else statement > > Ouch.. someone must have skipped his/her OO class...
Quite possibly :-) but that's not the problem here. The method in question might be called say emit_generic(self, any_type_of obj) and so one bunch of isinstance calls is actually needed, but not two bunches. So: lose the decorator and add an else and a raise at the end. There is a secondary problem: annoying the crap out of callers who often know what type they have and want an emit_real which would take an int, a long, or a float and an emit_strg and ... (yes, almost all the possible types are that simple) which wouldn't go through even one chain of isinstance calls. -- http://mail.python.org/mailman/listinfo/python-list