Global Variables in OOP and Python
Steven D'Aprano
steve at REMOVETHIScyber.com.au
Fri Dec 30 19:37:38 EST 2005
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.
More information about the Python-list
mailing list