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 soundBu, 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.
Görev
OrtaBu 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 temelVehiclesınıfını uygulayıncar.py:Vehiclesınıfından miras alanCarsınıfını oluşturunmotorcycle.py:Vehiclesınıfından miras alanMotorcyclesınıfını oluşturuntruck.py:Vehiclesınıfından miras alanTrucksı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ırFonksiyonlarla 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))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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı