Luokkamallit
Täsmäytä olion attribuuttien perusteella
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=namesitoo 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.
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.