On Sat, 18 Jul 2009 03:03:32 +0100, gabrielmonnerat <gabrielmonne...@gmail.com> wrote:

Ronn Ross wrote:
How do you define a global variable in a class. I tried this with do success:
class ClassName:
    global_var = 1
       def some_methos():
        print global_var

This doesn't work. What am I doing wrong?
You need pass "self" to the function and "global_var" needs be called with self.

class ClassName:
    global_var = 1
       def some_methos(self):
        print self.global_var

If the OP really wants global_var to be global to the class, this
approach will only work as long as he never assigns to self.global_var.

The terminology is a bit confusing here.  "Global variables" refers to
variables which are global to an entire module, ones that you would
use "global" to declare inside a function.  Something like this:

x = 5
def set_x(y):
    global x
    x = y

set_x(3)
print x

...gives the result "3"

The idea of defining a global variable in a class is a bit of a
nonsense, since globals exist for the entire module.  There are,
however, variables that exist and are the same for every instance
of a class, or "class attributes" as they are normally called.  You
use them either by assignment in the class definition, or in a
method by prefixing them with the class name.

class ClassName:
    global_var = 1
    def some_method(self):
        print ClassName.global_var
        ClassName.global_var = 2

"Instance attributes", the ones prefixed by "self", are what get
used for most purposes.  These are separate for each different
instance of the class.

class ClassName:
    def __init__(self, val):
       self.var = val

a = ClassName(1)
b = ClassName(2)

print a.var, b.var

...gives the result "1 2"

The wrinkle is that if you read from an instance attribute that
doesn't exist, Python will use a class attribute of the same name
if there is one.  This is often exploited for setting default
values.  Beware, though: the moment you assign, an instance
attribute is created -- the underlying class attribute is *not*
changed.

class ClassName:
    global_var = 1
    def some_method(self):
        self.global_var = 2

a = ClassName()
b = ClassName()
b.some_method()
print a.global_var, b.global_var

...gives the result "1 2" again!

--
Rhodri James *-* Wildebeest Herder to the Masses
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to