Python Academy · Oppitunti

attrs-kirjasto

Vertaa attrs-kirjastoa dataclasses-moduuliin

Oppitunti 4/413 vaihetta

attrs-kirjasto on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Mikä attrs on

attrs on kolmannen osapuolen kirjasto, joka kehitti kenttien perusteella muodostettavien luokkien idean jo vuosia ennen kuin dataclasses tuli osaksi vakiokirjastoa. Vakiokirjaston dataclasses-moduuli sai siitä suoraan vaikutteita.

  • attrs asennetaan erikseen: pip install attrs.
  • Se tarjoaa enemmän ominaisuuksia kuin dataclasses.
  • dataclasses on sisäänrakennettu ja kattaa useimmat jokapäiväiset tarpeet.

Moderni attrs-API

Moderni attrs käyttää @define-koristelijaa ja field()-funktiota attrs-nimiavaruudesta. Rakenne muistuttaa hyvin paljon dataclassia.

from attrs import define, field

@define
class Point:
    x: int
    y: int

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

Slotit oletusarvoisesti

Suuri ero on se, että @define-luokat käyttävät __slots__-rakennetta automaattisesti. Tämä vähentää muistin käyttöä ja estää vahingossa lisättyjen, määrittelemättömien attribuuttien käytön. Tavalliset dataclassit käyttävät normaalia __dict__-rakennetta, ellette välitä niille asetusta slots=True (Python 3.10 tai uudempi).

Sisäänrakennetut validaattorit

attrs sisältää valmiita validaattoreita. Kentälle voi määrittää validaattorin, joka suoritetaan rakentamisen aikana ja nostaa poikkeuksen, jos arvo on virheellinen. Dataclassilla ei ole sisäänrakennettua validointia, vaan kirjoitatte sen itse __post_init__-metodiin.

from attrs import define, field
from attrs.validators import instance_of

@define
class User:
    age: int = field(validator=instance_of(int))

User(30)        # ok
User('oops')    # raises TypeError

Muuntimet

Muunnin muuntaa syötearvon ennen sen tallentamista. Merkkijonon voi esimerkiksi muuntaa automaattisesti kokonaisluvuksi. Tämä on toinen ominaisuus, jota dataclassit eivät tarjoa.

from attrs import define, field

@define
class Item:
    price: int = field(converter=int)

i = Item('42')   # stored as the integer 42
print(i.price)

Dataclass-vastine

Tässä sama idea toteutetaan vakiokirjaston avulla. Validointi ja muunnos tehdään käsin __post_init__-metodissa, koska dataclassit eivät tarjoa kenttäkohtaisia koukkuja.

from dataclasses import dataclass

@dataclass
class Item:
    price: int

    def __post_init__(self):
        self.price = int(self.price)

print(Item('42'))

asdict molemmissa

Molemmat kirjastot tarjoavat asdict-apuohjelman. Dataclassien versio sijaitsee dataclasses-moduulissa ja attrs-versio attrs-moduulissa. Toiminta on lähes identtinen.

from dataclasses import dataclass, asdict

@dataclass
class Point:
    x: int
    y: int

print(asdict(Point(1, 2)))

Jäädyttäminen attrsissa

attrs tukee myös muuttumattomuutta. Käyttäkää @frozen-koristelijaa (lyhyt muoto määritykselle @define(frozen=True)) vain luku -instansseihin. Tämä vastaa määritystä @dataclass(frozen=True).

from attrs import frozen

@frozen
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)
# p.x = 9  would raise FrozenInstanceError

Ominaisuuksien vertailu

Näin ne vertautuvat:

  • dataclasses: vakiokirjasto, ei erillistä asennusta, kattaa perusasiat.
  • attrs: validaattorit, muuntimet, slotit oletusarvoisesti ja enemmän määritysmahdollisuuksia.
  • Molemmat luovat __init__-, __repr__- ja __eq__-metodit.

Kumpaa kannattaa käyttää

Valitkaa dataclasses, kun tarvitsette yksinkertaisia tietosäilöjä ilman ylimääräistä riippuvuutta. Valitkaa attrs, kun tarvitsette validaattoreita, muuntimia tai sen monipuolisempia määritysmahdollisuuksia ja voitte lisätä uuden riippuvuuden. Monet projektit aloittavat dataclassilla ja siirtyvät attrs-kirjastoon vasta, jos dataclassin ominaisuudet eivät enää riitä.

Yhteinen tausta

Koska dataclassit lainasivat attrs-kirjastolta niin paljon, niiden välinen siirtyminen on yleensä suoraviivaista: vaihtakaa tuonti ja dekorattori sekä mukauttakaa validaattorit tai muuntimet. Kun tunnette toisen, toinenkin tulee heti tutuksi.

  • @define vastaa koristelijaa @dataclass.
  • attrs.field vastaa määritystä dataclasses.field.
  • Kun siirrytään dataclassien käyttöön, validaattorit siirretään __post_init__-metodiin.

Pikatarkistus

Minkä ominaisuuden attrs tarjoaa, mutta vakiokirjaston dataclasses-moduuli ei tarjoa sisäänrakennettuna?

Kertaus

Vertailitte attrs-kirjastoa dataclassiin.

  • attrs innoitti dataclassit, ja se tarjoaa enemmän ominaisuuksia.
  • attrs lisää validaattorit, muuntimet ja oletusarvoiset slotit.
  • dataclasses on sisäänrakennettu eikä vaadi asennusta.
  • Valitkaa tarpeisiinne sopiva yksinkertaisin työkalu.
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 ”attrs-kirjasto” ilmainen?

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

Vertaa attrs-kirjastoa dataclasses-moduuliin 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 4/4.

Kuinka kauan ”attrs-kirjasto”-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