Python Academy · Oppitunti

Luokkamallit

Täsmäytä olion attribuuttien perusteella

Oppitunti 3/413 vaihetta

Luokkamallit on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Objektien sovittaminen

Luokkahaoht? Class patterns let match check the type of an object and pull out its attributes in one step. They look like a constructor call inside a case.

Pelkkä tyyppitarkistus

Tyhjillä sulkeilla varustettu luokkahao? hahmo täsmää mihin tahansa kyseisen luokan ilmentymään.

def kind(value):
    match value:
        case int():
            return 'an integer'
        case str():
            return 'a string'
        case _:
            return 'something else'

print(kind(5))
print(kind('hi'))
print(kind([1]))

Attribuuttien sitominen nimellä

Kirjoittakaa sulkeiden sisään attr=name, kun haluatte sovittaa ilmentymiä ja sitoa nimetyn attribuutin muuttujaan.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(x=px, y=py):
        print('point at', px, py)

Tiettyjen attribuuttiarvojen sovittaminen

Voitte vaatia attribuutin arvoksi tietyn literaalin. Tämä tapaus täsmää vain pisteisiin, jotka sijaitsevat x-akselilla.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

def describe(p):
    match p:
        case Point(x=0, y=0):
            return 'origin'
        case Point(x=x, y=0):
            return 'on x-axis at ' + str(x)
        case Point():
            return 'elsewhere'

print(describe(Point(0, 0)))
print(describe(Point(5, 0)))
print(describe(Point(1, 1)))

Sijaintiin perustuvat hahmot __match_args__-muuttujalla

Jos luokka määrittelee __match_args__-muuttujan, voitte sovittaa attribuutteja niiden sijainnin perusteella. Dataclass-luokat määrittävät tämän automaattisesti kenttien järjestyksen perusteella.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(px, py):
        print(px, py)

__match_args__-muuttujan määrittäminen itse

Tavallisessa luokassa määrittäkää __match_args__ tupleksi, joka nimeää sijainnin perusteella käytettävät attribuutit.

class Point:
    __match_args__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

match Point(1, 2):
    case Point(a, b):
        print(a, b)

Jakelu luokan perusteella

Luokkahao?mot muodostavat selkeän jakelijan toisiinsa liittyvien tyyppien joukolle, jossa kutakin tyyppiä käsitellään omassa tapauksessaan.

from dataclasses import dataclass

@dataclass
class Circle:
    radius: float

@dataclass
class Square:
    side: float

def area(shape):
    match shape:
        case Circle(radius=r):
            return 3.14159 * r * r
        case Square(side=s):
            return s * s

print(area(Circle(2)))
print(area(Square(3)))

Luokkahao?mojen sisäkkäisyys

Luokkahao?mot voivat olla sisäkkäisiä. Kenttä, joka on itse objekti, voidaan sovittaa toisella luokkahahmolla.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

@dataclass
class Line:
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))

match line:
    case Line(start=Point(x=0, y=0), end=Point(x=ex, y=ey)):
        print('from origin to', ex, ey)

Yhdistäminen sisäänrakennettuihin tyyppeihin

Sisäänrakennetut tyypit tukevat yhtä sijaintiin perustuvaa argumenttia, joka sitoo arvon. int(n) täsmää kokonaislukuun ja sitoo sen muuttujaan n.

def label(value):
    match value:
        case int(n):
            return 'int ' + str(n)
        case str(s):
            return 'str ' + s
        case _:
            return 'other'

print(label(7))
print(label('hi'))

Milloin luokkahao?moja kannattaa käyttää

Käyttäkää luokkahao?moja, kun sekä objektin tyyppi että attribuuttien arvot vaikuttavat logiikkaan, esimerkiksi tapahtumaobjektien, AST-solmujen tai muotohierarkioiden kanssa. Ne korvaavat pitkät isinstance-tarkistukset ja attribuuttien erillisen käsittelyn.

Sijaintiin ja avainsanoihin perustuvien hahmojen yhdistäminen

Voitte yhdistää sijaintiin ja avainsanoihin perustuvia alihahmoja yhdessä luokkahahmossa aivan kuten funktion kutsussa. Sijaintiin perustuvat käyttävät __match_args__-järjestystä, kun taas avainsanoihin perustuvat nimeävät attribuutin suoraan.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int
    z: int

p = Point(1, 2, 3)

match p:
    case Point(x, y, z=depth):
        print(x, y, depth)

Pikakertaus

Mihin hahmo Point(x=0, y=y) täsmää?

Kertaus

Opitte sovittamaan objekteja niiden attribuuttien perusteella.

  • ClassName() tarkistaa tyypin.
  • attr=name sitoo attribuutteja, ja literaalit vaativat täsmälliset arvot.
  • __match_args__ mahdollistaa sijaintiin perustuvan sovittamisen.
  • Luokkahao?mot voivat olla sisäkkäisiä, ja niiden avulla voidaan jakaa käsittely tyyppihierarkian perusteella.
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 ”Luokkamallit” ilmainen?

Kyllä – oppitunnin ”Luokkamallit” 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 ”Luokkamallit”?

Täsmäytä olion attribuuttien perusteella 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 3/4.

Kuinka kauan ”Luokkamallit”-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. match- ja case-perusteet
  2. Sekvenssien ja kuvausten täsmäytys
  3. Luokkamallit
  4. Vartijat ja jokerimerkit
← Takaisin: Python Academy