Tapfer

Uzman
Katılım
26 Şubat 2024
Mesajlar
25
Beğeniler
10
Merhabalar, 2 tane fotoğraf ekleyeceğim. İstediğim bir simülasyon yapmak. Bir araba oluşturup plakası ve rengini belirlemek. Bunu yaptım güzelce çalışıyor. Diğer adım ise hızını belirtmesi fakat şöyle yapmak istiyorum: Her accelerate yaptığımızda +10 hız olması, her brake yaptığımızda -5 hız olması. Eğer brake komutunu classın altında self.brake = 0 olarak belirtmezsem brake komutu tanınmıyor. Eğer belirtirsem de brake komutu işlevsiz kalıyor. Nasıl çözeceğimi düşünüyorum, uğraşıyorum ama çözemedim. GPT de bu sorunu çözemedi.
 

Dosya Ekleri

  • Ekran görüntüsü 2024-08-09 122331.webp
    Ekran görüntüsü 2024-08-09 122331.webp
    21,6 KB · Görüntüleme: 136
  • Ekran görüntüsü 2024-08-09 122340.webp
    Ekran görüntüsü 2024-08-09 122340.webp
    11,7 KB · Görüntüleme: 127
Son düzenleyen: Moderatör:
Sıkıntı, aynı sınıf içinde metot (brake()) ve attribute (brake) isimlerinin aynı olması. Ben de bunun sıkıntı olduğunu yeni öğrendim. : )

İsimlerini farklı yaparak bu sorunun üstesinden gelebilirsiniz. Attribute ismini brake_amount olarak değiştirmeyi önerebilirim veya önüne bir alt çizgi koyabilirsiniz: _brake. Burada alt çizgi, onun bir attribute olduğunu belirtmiş olur. Eğer alt çizgi koyacaksanız diğer attribute'lara da koymanız uyumluluk sağlar.

Kodlarınızı üyelerin daha rahat okuyabilmesi için bu konuları okumanızda fayda var, görsel olarak paylaşmak ceza almanıza sebep olabilir:





Her accelerate yaptığımızda +10 hız olması, her brake yaptığımızda -5 hız olması.

Brake'in yaptığı özünde velocity -= 5. Ek değişkene ihtiyaç yok, belirtmek istedim.
 
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.