typing.NamedTuple
Lisää tyyppivihjeet nimettyihin tupletietueisiin
typing.NamedTuple 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.
Tyypitetty vaihtoehto
typing.NamedTuple-yliluokka on moderni, luokkapohjainen tapa määritellä nimettyjä tupleja. Se lisää tyyppivihjeet ja näyttää tavalliselta luokalta, joten useimmat editorit ja tyyppitarkistimet ymmärtävät sen paremmin kuin tehdasfunktiomuodon.
Luokkapohjainen syntaksi
Periytykää NamedTuple-luokasta ja ilmoittakaa jokainen kenttä tyyppimerkinnän avulla. Tuloksena on edelleen aito tuple.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)Sama tuplen toiminta
Kaikki tehdasfunktioversiosta tutut ominaisuudet toimivat edelleen: nimen avulla käyttö, indeksin avulla käyttö, purkaminen ja muuttumattomuus.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p.x, p[1])
x, y = p
print(x, y)Oletusarvot suoraan määrittelyssä
Antakaa kentälle oletusarvo määrittämällä arvo suoraan luokan rungossa. Oletusarvollisten kenttien on tultava oletusarvottomien kenttien jälkeen.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))Metodien lisääminen
Koska kyseessä on luokka, voitte lisätä siihen oikeita metodeja. Tämä ei onnistu siististi collections.namedtuple-tehdasfunktiolla.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
def distance_sq(self):
return self.x ** 2 + self.y ** 2
print(Point(3, 4).distance_sq())Myös ominaisuudet
Voitte määritellä myös laskettuja ominaisuuksia, jotka johdetaan kenttien arvoista.
from typing import NamedTuple
class Rectangle(NamedTuple):
width: int
height: int
@property
def area(self):
return self.width * self.height
print(Rectangle(3, 4).area)Aputoiminnot säilyvät
Tutut tuple-aputoiminnot ovat edelleen käytettävissä: _replace(), _asdict() ja _fields toimivat samalla tavalla.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))Tyyppivihjeet dokumentoivat tarkoituksen
Merkintöjä ei valvota ajonaikaisesti, mutta ne dokumentoivat odotetut tyypit ja antavat mypyn kaltaisten työkalujen havaita virheet ennen ohjelman suorittamista.
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple vai dataclass
Valitkaa niiden välillä seuraavasti:
- NamedTuple: muuttumaton, tuplen kaltainen, tukee indeksointia ja purkamista.
- dataclass: oletusarvoisesti muuntuva (tai jäädytetty), ei tue indeksointia ja tarjoaa enemmän määritysvaihtoehtoja.
- Valitkaa NamedTuple, kun tuplen toiminta on tärkeää, ja dataclass monipuolisempia tietueita varten.
Sisäkkäisyys ja koostaminen
Nimetyt tuplet koostuvat luontevasti toisiinsa. Kenttä voi olla toinen nimetty tuple, jolloin voitte rakentaa rakenteista muuttumatonta dataa.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
class Line(NamedTuple):
start: Point
end: Point
line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)Funktioiden paluuarvotyyppeinä
Merkitkää funktion paluuarvoksi oma NamedTuple-tyyppinne, jotta editorit tietävät tuloksen kenttien tyypit. Merkintä dokumentoi palautettavan tietueen rakenteen.
from typing import NamedTuple
class Stats(NamedTuple):
minimum: int
maximum: int
def analyze(nums) -> Stats:
return Stats(min(nums), max(nums))
r = analyze([5, 2, 8])
print(r.minimum, r.maximum)Pikakertaus
Mikä on typing.NamedTuple-tyypin etu collections.namedtuple-tehdasfunktioon verrattuna?
Kertaus
Opitte lisäämään tyyppivihjeitä nimettyihin tupleihin.
- Periytykää
typing.NamedTuple-luokasta ja määritelkää kentät tyyppimerkintöineen. - Asettakaa oletusarvot suoraan määrittelyssä ja lisätkää metodeja sekä ominaisuuksia.
- Aputoiminnot
_replace,_asdictja_fieldstoimivat edelleen. - Suosikaa tätä tehdasfunktiota luettavuuden ja työkalujen tuen vuoksi.
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 ”typing.NamedTuple” ilmainen?
Kyllä – oppitunnin ”typing.NamedTuple” 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 ”typing.NamedTuple”?
Lisää tyyppivihjeet nimettyihin tupletietueisiin 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 ”typing.NamedTuple”-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
- Enum-luokka
- IntEnum ja Flag
- NamedTuple-perusteet
- typing.NamedTuple