spa...@gmail.com wrote:
Hello,

The point of good-bad-ness of global variables aside, if I needed to use
them, which is a better place to put them.
1. In the __init__ function of a class? So they are available at the time
an object is initialized or
2. In the actual function of the class where the variables are needed?
Pros and Cons of either approach?

Neither of those are *global* variables.

In Python, global variables are those at the top level of the module, and are only global to a single module, not your entire program. If your program is a single module, there is no difference.

This confusion is one of the reasons that I hate the Java-ism of calling things-attached-to-classes-or-attributes as "variables" instead of members or attributes. In Python, the usual term for them is "attributes", and you can have class attributes shared between all instances of a class, and instance attributes that are specific to the instance.


class K:
    shared = "this attribute is shared"

    def __init__(self):
        self.attribute = "this one is specific to the instance"


Pros for class attributes:

+ they are shared, so all your instances see the same value

+ you can reach them directly from the class, without creating an
  instance first: K.shared works

Cons for class attributes:

- they are shared, so all your instances see the same value


Pros for instance attributes:

+ they are not shared, so all your instances don't see the same value

Cons for class attributes:

- they are not shared, so all your instances don't see the same value

- every time you create an instance, the attribute has to be created

- you can't reach them directly from the class without creating an
  instance first: K.attribute does not work





--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to