Funkcja super()
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 18 z 64.
Funkcja super() pozwala klasie potomnej wywoływać metody z klasy nadrzędnej. Dzięki temu możesz rozszerzać funkcjonalność klasy nadrzędnej, zamiast całkowicie ją zastępować.
Oto przykład użycia super() w konstruktorze:
class Animal:
def __init__(self, name):
self.name = name
print(f"Animal created: {name}")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # Wywołaj __init__ klasy nadrzędnej
self.breed = breed
print(f"Dog breed set: {breed}")Utwórz obiekt psa:
buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")Wynik:
Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden RetrieverUżyj super(), aby rozszerzyć metody klasy nadrzędnej:
class Animal:
def make_sound(self):
print("Generic animal sound")
class Dog(Animal):
def make_sound(self):
super().make_sound() # Najpierw wywołaj metodę klasy nadrzędnej
print("Woof!") # Dodaj zachowanie charakterystyczne dla psaWywołaj rozszerzoną metodę:
buddy = Dog()
buddy.make_sound()Wynik:
Generic animal sound
Woof!Bez super() stracisz funkcjonalność klasy nadrzędnej:
class Cat(Animal):
def make_sound(self):
print("Meow!") # Tylko dźwięk kota, metoda klasy bazowej jest ignorowana
cat = Cat()
cat.make_sound()Wynik:
Meow!Najważniejsze: Używaj super(), aby wywoływać metody klasy nadrzędnej z klas potomnych. Dzięki temu możesz rozszerzać funkcjonalność, zamiast całkowicie ją zastępować. Często używa się tego do wywoływania metod __init__ klasy nadrzędnej i rozszerzania jej zachowania.
Wyzwanie
ŚredniW tym wyzwaniu zaimplementujesz hierarchię klas Person i Employee, używając dziedziczenia.
person.py: zawiera klasę Person z atrybutami name i ageemployee.py: zawiera klasę Employee dziedziczącą po Persondriver.py: główny plik do testowania implementacji
Każdy plik zawiera szczegółowe komentarze TODO, które pomogą Ci w implementacji.
Spróbuj swoich sił
# TODO: Zaimportuj klasę Person z person.py
# TODO: Zaimportuj klasę Employee z employee.py
def main():
# TODO: Utwórz obiekt Person o imieniu "Alice" i wieku 30 lat
person = None
# TODO: Utwórz obiekt Employee o imieniu "Bob", wieku 35 lat i zawodzie "Developer"
employee = None
# TODO: Wywołaj metodę introduce() na obiekcie Person
# Oczekiwany wynik: "Hi, I'm Alice and I'm 30 years old"
# TODO: Wypisz pustą linię jako odstęp — print()
# TODO: Wywołaj metodę introduce() na obiekcie Employee
# Oczekiwany wynik:
# "Hi, I'm Bob and I'm 35 years old"
# "I work as a Developer"
if __name__ == "__main__":
main()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