Metot Geçersiz Kılma
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 19 / 64.
Metot geçersiz kılma (method overriding), bir alt sınıfın, üst sınıfta halihazırda mevcut olan bir metodun kendi uygulamasını sağlamasına olanak tanır.
İşte metotları olan bir üst sınıf (parent class) örneği:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Bir metodu geçersiz kılan (override eden) bir alt sınıf oluşturun:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Üst sınıf metodunu geçersiz kıl (override et)Dog içindeki make_sound metodu Animal sınıfındakinin yerini alır, ancak info hala değişmeden miras alınır.
Örnekler oluşturun ve metotları test edin:
animal = Animal("Generic Animal")
dog = Dog("Buddy")Geçersiz kılınan metodu çağırın:
animal.make_sound()
dog.make_sound()Geçersiz kılınmamış metodu çağırın:
animal.info()
dog.info()Çıktı:
Some generic animal sound
Woof! Woof!
I am Generic Animal
I am BuddyMiras alınan herhangi bir metodu geçersiz kılabilirsiniz (override):
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")
cat = Cat("Whiskers")
cat.make_sound()
cat.info()Çıktı:
Meow!
I am Whiskers, a sneaky catÖnemli Nokta: Metot geçersiz kılma (method overriding), alt sınıfların devralınan davranışı özelleştirmesine olanak tanır. Alt sınıfta aynı isimle bir metot tanımlamanız yeterlidir. Ebeveyn versiyonu yerine alt sınıfın versiyonu kullanılacaktır.
Görev
OrtaBu meydan okumada, bir şekil hiyerarşisi uygulayacaksınız.
shape.py-colorözniteliğine ve metotlara sahip ebeveynShapesınıfını içerircircle.py-Shapesınıfından miras alanCirclesınıfını içerirsquare.py-Shapesınıfından miras alanSquaresınıfını içerir
Her dosya, uygulama boyunca size adım adım rehberlik edecek ayrıntılı TODO yorumları içerir.
Kopya kağıdı
Metot geçersiz kılma (method overriding), bir alt sınıfın, üst sınıfta zaten var olan bir metodun kendi uygulamasını sağlamasına olanak tanır.
Üst sınıf örneği:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Bir metodu geçersiz kılan alt sınıf:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Üst sınıf metodunu geçersiz kılDog sınıfındaki make_sound metodu, Animal sınıfındakinin yerini alır, ancak info hala değişmeden miras alınır.
Birden fazla metodu geçersiz kılabilirsiniz:
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")Önemli Nokta: Alt sınıfta aynı isimle bir metot tanımlamanız yeterlidir. Üst sınıfın sürümü yerine alt sınıfın sürümü kullanılacaktır.
Kendin dene
from shape import Shape
from circle import Circle
from square import Square
# Test senaryosu işleyicisi
test_case = input()
if test_case == "base_shape":
# Temel Shape sınıfını test et
shape = Shape("green")
print(f"Color: {shape.color}")
print(f"Area: {shape.area()}")
print("Describe output:")
shape.describe()
elif test_case == "circle_basics":
# Circle oluşturma ve temel metotları test et
circle = Circle("red", 5)
print(f"Color: {circle.color}")
print(f"Radius: {circle.radius}")
print(f"Area (rounded): {round(circle.area(), 2)}")
print("Describe output:")
circle.describe()
elif test_case == "square_basics":
# Square oluşturma ve temel metotları test et
square = Square("blue", 4)
print(f"Color: {square.color}")
print(f"Side length: {square.side_length}")
print(f"Area: {square.area()}")
print("Describe output:")
square.describe()
elif test_case == "various_sizes":
# Farklı boyutlara sahip birden fazla örneği test et
shapes = [
Circle("yellow", 2),
Circle("orange", 7.5),
Square("purple", 3),
Square("black", 10)
]
for i, shape in enumerate(shapes, 1):
print(f"Shape {i}:")
shape.describe()
print(f"Area: {round(shape.area(), 2)}")
print() # Okunabilirlik için boş satır
elif test_case == "shape_polymorphism":
# Bir şekil listesi ile polimorfik davranışı test et
shapes = [
Shape("white"),
Circle("red", 3),
Square("blue", 4)
]
print("Polymorphic behavior demonstration:")
for shape in shapes:
shape.describe()
print(f"Area: {round(shape.area(shape_polymorphism), 2)}")
print() # Okunabilirlik için boş satır
elif test_case == "original_test_case":
# Yarışmadaki orijinal test kodunu çalıştır
circle = Circle("red", 5)
square = Square("blue", 4)
# describe metodunu test et
circle.describe()
square.describe()
# area metodunu test et
print(f"Circle area: {circle.area()}")
print(f"Square area: {square.area()}")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ı