X = 1

def nester():
   X = 2                    # Przesłania zmienną globalną 
   print(X)                 # Zmienna lokalna: 2
   class C:
       X = 3                # Klasa lokalna przesłania nazwy funkcji nester: C.X lub I.X  (bez zasięgu)
       print(X)             # Zmienna lokalna: 3
       def method1(self):
           print(X)         # W zawierającym def (a nie 3 w klasie!): 2
           print(self.X)    # Dziedziczona zmienna lokalna klasy: 3
       def method2(self):
           X = 4            # Przesłania zawierającą (funkcję nester, a nie klasę)
           print(X)         # Zmienna lokalna: 4
           self.X = 5       # Przesłania klasę
           print(self.X)    # Zlokalizowana w instancji: 5
   I = C()
   I.method1()
   I.method2()

print(X)                    # Zmienna globalna: 1
nester()                    # Pozostałe: 2, 3, 2, 3, 4, 5

