Nadpisywanie metod
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 19 z 64.
Przesłanianie metod pozwala klasie potomnej dostarczyć własną implementację metody, która już istnieje w klasie nadrzędnej.
Oto przykład klasy nadrzędnej z metodami:
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}")Utwórz klasę potomną, która przesłania jedną metodę:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Nadpisz metodę klasy nadrzędnejMetoda make_sound w klasie Dog zastępuje tę z klasy Animal, ale info nadal jest dziedziczona bez zmian.
Utwórz instancje i przetestuj metody:
animal = Animal("Generic Animal")
dog = Dog("Buddy")Wywołaj nadpisaną metodę:
animal.make_sound()
dog.make_sound()Wywołaj metodę, która nie została przesłonięta:
animal.info()
dog.info()Wynik:
Some generic animal sound
Woof! Woof!
I am Generic Animal
I am BuddyMożesz nadpisać dowolną odziedziczoną metodę:
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()Wynik:
Meow!
I am Whiskers, a sneaky catKluczowa kwestia: Nadpisywanie metod pozwala klasom potomnym dostosowywać odziedziczone zachowanie. Wystarczy zdefiniować metodę o tej samej nazwie w klasie potomnej. Zamiast wersji klasy nadrzędnej zostanie użyta wersja klasy potomnej.
Wyzwanie
ŚredniW tym wyzwaniu zaimplementujesz hierarchię kształtów.
shape.py— zawiera klasę nadrzędnąShapez atrybutemcolori metodamicircle.py— zawiera klasęCircle, która dziedziczy poShapesquare.py— zawiera klasęSquare, która dziedziczy poShape
Każdy plik zawiera szczegółowe komentarze TODO, które krok po kroku poprowadzą Cię przez implementację.
Spróbuj swoich sił
from shape import Shape
from circle import Circle
from square import Square
# Obsługa przypadku testowego
test_case = input()
if test_case == "base_shape":
# Przetestuj klasę bazową Shape
shape = Shape("green")
print(f"Color: {shape.color}")
print(f"Area: {shape.area()}")
print("Describe output:")
shape.describe()
elif test_case == "circle_basics":
# Przetestuj tworzenie obiektów Circle i podstawowe metody
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":
# Przetestuj tworzenie obiektów Square i podstawowe metody
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":
# Przetestuj wiele obiektów o różnych wymiarach
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() # Pusta linia dla czytelności
elif test_case == "shape_polymorphism":
# Przetestuj zachowanie polimorficzne na liście figur
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() # Pusta linia dla czytelności
elif test_case == "original_test_case":
# Uruchom oryginalny kod testowy z zadania
circle = Circle("red", 5)
square = Square("blue", 4)
# Przetestuj metodę describe
circle.describe()
square.describe()
# Przetestuj metodę area
print(f"Circle area: {circle.area()}")
print(f"Square area: {square.area()}")Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektyParametr selfMetodyAtrybutyMetoda konstruktora (__init__)Powtórzenie – prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaFunkcja super()Nadpisywanie metodDziedziczenie wielokrotneKolejność rozwiązywania metodPodsumowanie – hierarchia pracowników7Metody specjalne
Wprowadzenie do metod magicznychPrzeciążanie operatorówMagiczne metody kontenerówPowtórka – własna lista10Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy2Dekoratory
Wprowadzenie do dekoratorówDekorator propertyDekorator metody statycznejDekorator metody klasowej5Polimorfizm
Ponowne omówienie nadpisywania metodTypowanie kaczeKlasy i metody abstrakcyjneProjektowanie interfejsówPodsumowanie — kalkulator kształtów8Zaawansowane koncepcje programowania obiektowego
Kompozycja a dziedziczenieMiksyMetody statyczne i klasoweDekoratory klasMenedżery kontekstu11Wzorce projektowe, część 2
Wzorzec PolecenieWzorzec AdapterWzorzec DekoratorWzorzec Metoda szablonowaWzorzec StanWzorzec Kompozyt3Właściwości klas
Zmienne instancji a zmienne klasoweDekoratory właściwościAtrybuty prywatnePowtórzenie — menedżer kont bankowych6Hermetyzacja
Public, Protected, Private — pamięćModyfikatory dostępuUkrywanie informacjiDekoratory właściwości — zaawansowanePodsumowanie — system ewidencji uczniów12Projekt: System zarządzania biblioteką
Przegląd projektuKlasy Book i UserSystem wypożyczeńFunkcja wyszukiwaniaInterfejs administratoraTestowanie i integracjaPoćwicz samodzielnie: Kompilator Python online