Python Academy · Oppitunti

Dataclassin määrittäminen

Käyttäkää @dataclass-annotaatiota toistokoodin vähentämiseen.

Oppitunti 1/413 vaihetta

Dataclassin määrittäminen 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.

Miksi dataclass-luokkia käytetään?

Kun kirjoitatte luokan, joka sisältää pääasiassa dataa, päädytte toistamaan samaa vakiorakennetta: __init__-, __repr__- ja __eq__-metodit. dataclasses-moduuli luo kaiken tämän puolestanne yksinkertaisten kenttämäärittelyjen perusteella.

  • Vähemmän kirjoitettavaa ja luettavaa koodia.
  • Vähemmän kirjoitusvirheiden mahdollisuuksia __init__-metodissa.
  • Sisältyy vakiokirjastoon Python 3.7:stä alkaen.

Vanha tapa

Tässä on tavallinen luokka, joka tallentaa pisteen. Huomatkaa, kuinka paljon kirjoitettavaa tarvitaan vain kahden luvun tallentamiseen.

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

p = Point(1, 2)
print(p.x, p.y)

@dataclass-dekoraattori

Lisätkää @dataclass luokan yläpuolelle ja määrittäkää kentät tyyppimerkintöjen avulla. Python luo __init__-metodin automaattisesti.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p.x, p.y)

Automaattinen __repr__

Dataclass-luokat luovat myös luettavan __repr__-esityksen, joten objektin tulostaminen näyttää sen kentät muistiosoitteen sijaan.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(3, 4))

Automaattinen __eq__

Kaksi dataclass-ilmentymää ovat yhtäsuuret, kun kaikki niiden kentät ovat yhtäsuuret. __eq__-metodia ei tarvitse kirjoittaa itse.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))

Tyyppimerkinnät ovat pakollisia

Jokaisella kentällä on oltava tyyppimerkintä. Merkintä kertoo dataclass-mekanismille, että nimi on kenttä. Pelkästä sijoituksesta ilman merkintää tulee tavallinen luokka-attribuutti, ei kenttää.

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

u = User('Alice', 30)
print(u)

Metodien lisääminen

Dataclass on edelleen tavallinen luokka. Voitte lisätä siihen tavallisia metodeja, jotka käyttävät automaattisesti luotuja kenttiä.

from dataclasses import dataclass

@dataclass
class Rectangle:
    width: int
    height: int

    def area(self):
        return self.width * self.height

r = Rectangle(3, 4)
print(r.area())

Kenttien muuttaminen

Dataclass-ilmentymät ovat oletusarvoisesti muokattavia, joten voitte määrittää niiden kentille uusia arvoja luomisen jälkeen aivan kuten tavallisille attribuuteille.

from dataclasses import dataclass

@dataclass
class Counter:
    value: int

c = Counter(0)
c.value += 5
print(c.value)

asdict ja astuple

Aputoiminnot asdict() ja astuple() muuntavat ilmentymän sanakirjaksi tai tuplaksi, mikä on kätevää serialisoinnissa.

from dataclasses import dataclass, asdict, astuple

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(asdict(p))
print(astuple(p))

Sisäkkäiset dataclass-luokat

Dataclass-kenttä voi itse olla toinen dataclass. Automaattisesti luotu __repr__ ja asdict() käsittelevät myös sisäkkäiset rakenteet rekursiivisesti.

from dataclasses import dataclass, asdict

@dataclass
class Address:
    city: str

@dataclass
class Person:
    name: str
    address: Address

p = Person('Bob', Address('Paris'))
print(asdict(p))

Milloin dataclass-luokkia kannattaa käyttää?

Käyttäkää dataclass-luokkaa, kun luokka pääasiassa kokoaa yhteen toisiinsa liittyviä arvoja.

  • Asetusoliot.
  • Funktiosta palautettavat tietueet.
  • Yksinkertaiset arvotyypit, kuten koordinaatit tai raha-arvot.

Jos luokka sisältää enemmän toimintaa kuin dataa, tavallinen luokka voi olla selkeämpi.

Pikatarkistus

Mitä @dataclass-dekoraattori luo automaattisesti?

Kertaus

Opitte käyttämään @dataclass-dekoraattoria vakiokoodin vähentämiseen.

  • Määrittäkää kentät tyyppimerkintöjen avulla.
  • __init__-, __repr__- ja __eq__-metodit luodaan automaattisesti.
  • Muuntaa ilmentymiä käyttämällä asdict()- ja astuple()-toimintoja.
  • Voitte edelleen lisätä metodeja ja sijoittaa dataclass-luokkia sisäkkäin.
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 ”Dataclassin määrittäminen” ilmainen?

Kyllä – oppitunnin ”Dataclassin määrittäminen” 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 ”Dataclassin määrittäminen”?

Käyttäkää @dataclass-annotaatiota toistokoodin vähentämiseen. 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 ”Dataclassin määrittäminen”-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. Dataclassin määrittäminen
  2. Oletusarvot ja field()
  3. Jäädytys- ja vertailuasetukset
  4. attrs-kirjasto
← Takaisin: Python Academy