Menu
Coddy logo textTech

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 Retriever

Uż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 psa

Wywoł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.

challenge icon

Wyzwanie

Średni

W tym wyzwaniu zaimplementujesz hierarchię klas Person i Employee, używając dziedziczenia.

  • person.py: zawiera klasę Person z atrybutami name i age
  • employee.py: zawiera klasę Employee dziedziczącą po Person
  • driver.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()
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Python online