On 2010-09-22, at 5:50 PM, Steven D'Aprano wrote: > On Thu, 23 Sep 2010 06:07:21 am Pete wrote: >> For a plugin mechanism, I'm populating a dict with calls to the >> implemented plugins. > [...] >> Now I get that I need to instantiate foo and bar first before I can >> refer to them in the dict. >> >> so something like >> >> foo_instance = foo() >> bar_instance = bar() >> >> list = { 'foo': foo_instance.do(), 'bar': bar_instance.do() } >> >> would probably work. But is that the best/pythonic way to do it? > > (1) It's generally a bad idea to "shadow" the name of a built-in > function like list. Particularly since your variable list isn't > actually a list, but a mapping of name:function. Find a better > name :)
That was just for the example, of course, but point taken :) > (2) You end up calling the do() methods inside the dict. You probably > mean to save the method itself as a callback function. I did. > (3) There's no need to keep the instances floating around as > independent names, unless you need direct access to them. > > Putting these together, we get: > > dispatch_table = { 'foo': foo().do, 'bar': bar().do } > > Which you then later call using: > > dispatch_table[name](args) > > where name is "foo" or "bar", and args is anything you need to pass to > the do() method. I see. And are those methods then unbound? (Because when instantiating the object it needs to do some initialization of instance variables, and I think those were not available when calling an unbound method. (My understanding of the bound/unbound method distinction is rather vague at this point, I apologise) > Oh, and (4)... in Python circles, it's traditional but not compulsory > to use metasyntactic variables named after Monty Python sketches > rather than foo and bar. So spam, ham, eggs, parrot (dead or > otherwise), names of cheeses, aardvark..., although there is no > standard order. > > Indeed, when I design my killer language, the identifiers "foo" and > "bar" will be reserved words, never used, and not even mentioned in > the reference manual. Any program using one will simply dump core > without comment. Multitudes will rejoice. -- Tim Peters, 29 Apr 1998 THANK YOU! It's this kind of knowledge that I crave, sir. :) - Pete _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor