Python Academy · Oppitunti

Yksittäinen periytyminen

Luokaa lapsiluokkia, jotka perivät attribuutteja ja metodeja yläluokalta.

Oppitunti 1/414 vaihetta

Yksittäinen periytyminen on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Johdanto

Perinnän avulla aliluokka voi käyttää uudelleen yliluokan toimintaa ja laajentaa sitä ilman koodin toistamista.

Aliluokan määrittäminen

class Dog(Animal): perii kaiken Animal-luokalta. Aliluokkaan voi lisätä uusia metodeja tai siinä voi korvata aiempia metodeja.
class Animal:
    def __init__(self, name): self.name = name
    def speak(self): return '...'
class Dog(Animal):
    def speak(self): return 'Woof'
d = Dog('Rex')
print(d.name, d.speak())

super().__init__-metodin kutsuminen

super().__init__(args) kutsuu yliluokan __init__-metodia. Kutsukaa sitä aina aliluokassa, jos yliluokka sisältää alustukseen liittyvää logiikkaa.
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
d = Dog('Rex', 'Labrador')
print(d.name, d.breed)

Metodien periminen

Aliluokka perii kaikki yliluokan metodit. Jos niitä ei korvata, ne toimivat muuttamattomina.
class Vehicle:
    def start(self): return 'starting'
class Car(Vehicle):
    pass
print(Car().start())

Metodien korvaaminen

Määritelkää aliluokassa samanniminen metodi, joka korvaa yliluokan version. Tällöin kutsutaan aliluokan versiota.
class Shape:
    def area(self): return 0
class Square(Shape):
    def __init__(self, s): self.s = s
    def area(self): return self.s**2
print(Square(4).area())

Yliluokan toiminnan laajentaminen

Kutsukaa super().method()-metodia korvaavan metodin sisällä, jotta yliluokan versio suoritetaan ensin ja voitte lisätä sen jälkeen muuta toimintaa.
class Animal:
    def describe(self): return 'I am an animal'
class Dog(Animal):
    def describe(self): return super().describe() + ' and a dog'
print(Dog().describe())

isinstance() ja issubclass()

isinstance(obj, Parent) palauttaa arvon True myös aliluokkien instansseille. issubclass(Child, Parent) tarkistaa luokkahierarkian.
class Animal: pass
class Dog(Animal): pass
d = Dog()
print(isinstance(d, Animal))
print(issubclass(Dog, Animal))

Aliluokan uudet metodit

Aliluokka voi määritellä kokonaan uusia metodeja, joita yliluokalla ei ole.
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def fetch(self): return f'{self.name} fetches!'
print(Dog('Rex').fetch())

Suojatut attribuutit

_name-käytäntö ilmaisee, ettei attribuuttia ole tarkoitettu käytettäväksi luokan ulkopuolelta. Aliluokat VOIVAT käyttää sitä.
class Animal:
    def __init__(self, name): self._name = name
    def name(self): return self._name
class Dog(Animal):
    def bark(self): return f'{self._name} barks'
print(Dog('Rex').bark())

Abstraktit kantaluokat

from abc import ABC, abstractmethod pakottaa aliluokat toteuttamaan metodit.
from abc import ABC, abstractmethod
class Shape(ABC):
    @abstractmethod
    def area(self): pass
class Circle(Shape):
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(3).area())

__bases__ ja __mro__

Dog.__bases__ näyttää suorat yliluokat. Dog.__mro__ näyttää koko metodinratkaisujärjestyksen.
class A: pass
class B(A): pass
class C(B): pass
print(C.__mro__)

Pikatarkistus

Mitä super().__init__() tekee aliluokassa?

Kertaus

Perintä: class Child(Parent). super() käyttää yliluokan toiminnallisuutta. Korvatkaa metodit toiminnan muuttamiseksi. isinstance() tarkistaa hierarkian. ABC pakottaa noudattamaan abstrakteja sopimuksia.

Jatka

Edistytte hienosti! Jatkakaa seuraavan käsitteen opettelua.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”Yksittäinen periytyminen” ilmainen?

Kyllä – oppitunnin ”Yksittäinen periytyminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yksittäinen periytyminen”?

Luokaa lapsiluokkia, jotka perivät attribuutteja ja metodeja yläluokalta. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Yksittäinen periytyminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yksittäinen periytyminen
  2. Metodien ylikirjoitus ja super()
  3. Moniperintä ja MRO
  4. Polymorfismi ja ankkatyypitys
← Takaisin: Python Academy