Dataclassin määrittäminen
Käyttäkää @dataclass-annotaatiota toistokoodin vähentämiseen.
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()- jaastuple()-toimintoja. - Voitte edelleen lisätä metodeja ja sijoittaa dataclass-luokkia sisäkkäin.
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
- Dataclassin määrittäminen
- Oletusarvot ja field()
- Jäädytys- ja vertailuasetukset
- attrs-kirjasto