глобал в классе это кощунство. Попытаюсь кратко на пальцах объяснить.
class A:
def __init__(self):
self.x = 0
x = 1
a = A()
print a.x
выведет ноль.
Разберем, что происходит. Внутри класса в функции первый аргумент (по рекомендательному соглашению это имя self) это ссылка на экземпляр класса. Т.е. запись внутри функции инит self.x аналогична a.x за пределами класса, где a это созданный экземпляр класса A. Класс- это шаблон, экземпляров можно создать сколько угодно:
b = A()
b.x = 2
print (a.x, b.x)
выведет (0, 2). Видишь? Имя переменной одно, x, но привязаны к разным экземплярам, для каждого своя область в памяти. А вот переменная x = 1 живет только внутри функции инит, больше ниоткуда ее не увидишь. Если например в классе А еще есть функция def func(self): print 1, то вызов a.func() выглядет как вызов функции без аргументов, но, на самом деле, питон негласно сам подставляет туда первым аргументом ссылку на экземпляр. Новичков это зачастую сбивает с толку, когда они например читают лог ошибки, а там написано, что скажем передан один аргумент, а надо два, они не могут понять, какой они аргумент передали, ведь вообще без аргументов вызывали. Откуда он берется, у выше уже писАл.
-------------
добавлено в 13.05: забыл добавить. Функция __init__ (частенько еще ее называют конструктором, а иной раз это оспаривают) исполняется каждый раз, когда создается экземпляр данного класса.