Menu
Coddy logo textTech

Metot Geçersiz Kılma

Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 19 / 64.

Metot geçersiz kılma, bir alt sınıfın üst sınıfta zaten var olan bir metot için kendi uygulamasını sağlamasına olanak tanır.

İşte metotlara sahip bir ü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 yöntemi geçersiz kılan 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

Dog sınıfındaki make_sound yöntemi Animal sınıfındakinin yerini alır, ancak info hâlâ değiştirilmeden 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 Buddy

Devralınan herhangi bir 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")

cat = Cat("Whiskers")
cat.make_sound()
cat.info()

Çıktı:

Meow!
I am Whiskers, a sneaky cat

Önemli Nokta: Metot geçersiz kılma, alt sınıfların devralınan davranışı özelleştirmesine olanak tanır. Alt sınıfta aynı ada sahip bir metot tanımlaman yeterlidir. Üst sınıfın sürümü yerine alt sınıfın sürümü kullanılır.

challenge icon

Görev

Orta

Bu meydan okumada, bir şekil hiyerarşisi uygulayacaksınız.

  • shape.py - color özniteliğine ve metotlara sahip ebeveyn Shape sınıfını içerir
  • circle.py - Shape sınıfından miras alan Circle sınıfını içerir
  • square.py - Shape sınıfından miras alan Square sınıfını içerir

Her dosya, uygulama boyunca size adım adım rehberlik edecek ayrıntılı TODO yorumları içerir.

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()}")
quiz iconKendini test et

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

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi