On Fri, 30 Dec 2005 15:03:54 -0800, newbie wrote: > Hello, > > I have questions about global variables in OOP (in general) and Python > (in specific). I understand (I think) that global variables are > generally not a good idea. However, if there are variables that need to > be accessed by a number of classes that exists in separate namespaces > (files), what would be the best way to do this? > > So far, I have approached the problem by making the variables > attributes of one class and passing instances of the class as variables > to the other class' methods.
Do you mean something like this? # Module care_and_feeding import birds import foods def feed_my_pet(): pet = birds.Parrot("Norwegian Blue") snack = foods.Spam("A tasty meat-like treat") pet.eats(snack) return "Yummy!" That is a good way of handling the problem. > The other way I thought of is to create a separate class that consists > of the variables and to use the > > from <file name> import * > > in all of the files (namespaces) where it is needed. That's a bad way of handling it. It has all the worst aspects of using global variables, plus the worst aspects of import * (namespace pollution and shadowing of existing names). Unless I'm badly mistaken, Guido has decided that "from module import *" was a mistake, and that will be removed from the (legendary) Python 3, if and when it gets created. In the meantime, it is highly recommended that you don't use that form. > Is there a better way? > > Are the two ideas presented above acceptable? If so, is one better than > the other from an OOP POV? I think the first way is fine, but of course the Devil is in the details: I can't judge your code without seeing it. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list