[Tutor] Syntactical question / OT Lisp

Kent Johnson kent37 at tds.net
Fri Jan 21 04:04:47 CET 2005


Liam Clarke wrote:
> Hi all, 
> 
> I've got a module called foo.py
> 
> foo.py - 
> 
> import parrot
> 
> class Bar(model.Background):
> 
>     def __initialize__(self, event):
>              #Just a pythoncard variant on init
>              self.config=self.loadCfg()
> 
> 
>    def loadCfg():
>         #get some cfg stuff, return as dict
>         return cfgDict
> 
>    def on_aBtn_mouseClick(self, event):
>          parrot.Sketch()
> 
> app=Bar(main.application)
> app.mainloop()
> 
> 
> If I wanted the function parrot.Sketch() to access that config
> dictionary, I would reference it as
> 
> foo.app.config?
> 
> Is that right?

Yes, after
   import foo
but it's really ugly and a very bad idea. You should do something different like
   parrot.Sketch(self.config)
or even put the config into a module of its own if you really want a globally available configuration.

OK, so why is this so bad? Because foo and parrot depend on each other. Neither one can be used 
independently. You can't test parrot.Sketch() without creating a foo.app. You can't reuse 
parrot.Sketch() in another module named bar. You can't even restructure foo.py to make app a local 
variable of a main() function, for example.

Don't do this. Really. This way lies spaghetti code and intractable bugs and throwing the whole mess 
away and starting over doing it right this time.

Try to organize your modules so the dependencies form an acyclic directed graph. In other words, 
don't have any dependency cycles like foo depends on parrot depends on foo.

Kent

> 
> Regards,
> 
> Liam Clarke



More information about the Tutor mailing list