Menu
Coddy logo textTech

Metot Geçersiz Kılmaya Yeniden Bakış

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 23 / 64.

Polimorfizm "çok biçimlilik" anlamına gelir ve farklı sınıflara ait nesnelerin aynı metot çağrısına farklı şekillerde yanıt vermesini sağlar. Metot geçersiz kılma (method overriding) bunu mümkün kılar.

İşte bir metodu olan ebeveyn sınıf:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Aynı metodu geçersiz kılan alt sınıflar oluşturun:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

Her alt sınıf, speak() metodunun kendi uygulamasını sağlar.

Farklı hayvanlardan oluşan bir liste oluşturun:

animals = [Dog(), Cat(), Cow(), Animal()]

Tüm nesnelerde aynı yöntemi çağırın:

for animal in animals:
    print(animal.speak())

Çıktı:

Woof!
Meow!
Moo!
Animal makes a sound

Bu, iş başındaki çok biçimliliktir (polymorphism) - aynı metot çağrısı, nesnenin gerçek türüne bağlı olarak farklı davranır.

Polimorfizmi fonksiyonlarla da kullanabilirsiniz:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Hav!
make_animal_speak(cat)  # Miyav!

Fonksiyonun hangi tür hayvan aldığını bilmesine gerek yoktur - sadece speak() fonksiyonunu çağırır ve doğru davranışı elde eder.

Anahtar Nokta: Polimorfizm, farklı nesnelere ortak bir arayüz üzerinden aynı şekilde davranmanıza olanak tanır. Metot geçersiz kılma (method overriding) farklı uygulamalar sağlarken, polimorfizm bunları tek tipte çağırmanıza izin verir. Bu, kodu daha esnek ve genişletilmesi daha kolay hale getirir.

challenge icon

Görev

Orta

Bu meydan okumada, bir araç kalıtım sistemi uygulayacaksınız.

Şu dosyaları düzenlemeniz gerekecek:

  • vehicle.py: Marka/model (make/model) öznitelikleri ve metotları ile temel Vehicle sınıfını uygulayın
  • car.py: Vehicle sınıfından miras alan Car sınıfını oluşturun
  • motorcycle.py: Vehicle sınıfından miras alan Motorcycle sınıfını oluşturun
  • truck.py: Vehicle sınıfından miras alan Truck sınıfını oluşturun

Her dosya, uygulamanızı adım adım yönlendirmek için ayrıntılı TODO yorumları içerir. Dosyalar arasında gereken import ifadelerine dikkat edin ve kalıtım ilişkilerini takip edin. driver.py dosyası, uygulamanızın tüm araç türlerinde doğru çalıştığını doğrulayacak test senaryolarını içerir.

Kopya kağıdı

Polimorfizm (çok biçimlilik), farklı sınıflara ait nesnelerin metot geçersiz kılma (method overriding) yoluyla aynı metot çağrısına farklı şekillerde yanıt vermesini sağlar.

Bir metodu olan bir üst sınıf (parent class) oluşturun:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Alt sınıflar aynı metodu geçersiz kılar (override eder):

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

Farklı nesneler üzerinde aynı metodu çağırın:

animals = [Dog(), Cat(), Animal()]
for animal in animals:
    print(animal.speak())  # Her biri farklı çıktı yazdırır

Fonksiyonlarla polimorfizm kullanın:

def make_animal_speak(animal):
    print(animal.speak())

make_animal_speak(Dog())  # Woof!
make_animal_speak(Cat())  # Meow!

Polimorfizm, farklı nesnelere ortak bir arayüz üzerinden aynı şekilde davranmanıza olanak tanıyarak kodu daha esnek ve genişletilmesi daha kolay hale getirir.

Kendin dene

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck

def vehicle_info(vehicle):
    return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"


# Farklı araçlarla test et - BU TEST KODUNU DEĞİŞTİRMEYİN
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler