Python wierdness

Just frustrated, why the output is

Broken = 2 and Wierd = 3 at one level make no sense, since after all you would think that if you referenced a member variable it’s context would remain the same…

class Foo :
    BROKEN = 1
    WIERD = 1

    def __init__(self) :
        print("Before broken=%d weird=%d" % (self.BROKEN, self.WIERD))
        self.BROKEN += 1
          
        self.__class__.WIERD += 1
        print("after broken=%d weird=%d" % (self.BROKEN, self.WIERD))

Foo()
Foo()

# Output is :
# Before broken=1 weird=1
# after broken=2 weird=2
# Before broken=1 weird=2
# after broken=2 weird=3