attrs-kirjasto
Vertaa attrs-kirjastoa dataclasses-moduuliin
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 TypeErrorMuuntimet
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 FrozenInstanceErrorOminaisuuksien 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.
@definevastaa koristelijaa@dataclass.attrs.fieldvastaa 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.
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.