Python dynamically typed bir dil.
Değişken tanımlamak için,
değişken = değer dediğinde, runtime (çalışma sırasında) dinamik olarak tanımlanır ve tipi belirlenir. Bu değişken Python Interpreter'ında bir map üzerinde değeriyle beraber tutulur ve herhangi bir değişiklik yine bu map üzerinde gerçekleşir.
Python'da fonksiyonlarda birer değişkendir. Birer değişken oldukları için de onları tanımladığında da yine bu map üzerinde karşılık gelen fonksiyonla beraber kaydedilir. Bu durum da sen self.brake diye tanımladığında self.brake() olan metodu override ediyorsun, üstüne yazıyorsun. Haliyle bu durumda her iki durumda da istediğini elde edemiyorsun.
def breake: dediğin zaman aslında bir değişken tanımlamış oluyorsun. Haliyle self.brake = 0 demediğin zaman, Python interpreter'ı gidip fonksiyon olan brake'ten çıkarmaya çalışıyor senin değerini.
Python dynamically typed bir dil olduğundan farklı tür değerleri, tek değişkene atayabiliyorsun.
Python:
def pow(x, y):
return x**y
pow = 5
print(pow(2, 3)) # TypeError: 'int' object is not callable
Yukarıdaki kod bloğuna bakalım. İlki bir fonksiyon. İkincisi int bir object. Aynı değişken ismine ikisini de atayabildim. Strongly typed bir dil bunu yapmama izin vermezdi.
Aynı durum senin fonksiyonunda da gerçekleşiyor. Dilleri öğrenirken çalışma mantıklarını da araştırın. Çok önemli bir olay. Olası bugları kilometrelerce öteden görmenize olanak sağlıyor.