Artikkelit

Python ja edistyneet menetelmät, dunder-toiminnot parempaan ohjelmointiin

Python on fantastinen ohjelmointikieli, ja sen todistaa GitHub, on myös vuoden 2022 toiseksi suosituin kieli.

Pythonin mielenkiintoisimmat edut ovat suuri ohjelmoijayhteisö.

Näyttää siltä, ​​​​että Pythonilla on paketti kaikkiin käyttötarkoituksiin.

Python-ohjelmoinnin valtavassa maailmassa on joukko ominaisuuksia, jotka jäävät usein aloittelijoille huomaamatta, mutta joilla on kuitenkin merkittävä merkitys kielen ekosysteemissä.

Taikamenetelmät ovat joukko esimenetelmiädefinites Pythonissa, jotka tarjoavat erityisiä syntaktisia ominaisuuksia. Ne on helppo tunnistaa niiden kaksoisviivan alussa ja lopussa, kuten __init__, __call__, __len__ … jne.

Maagiset menetelmät

Taikamenetelmät sallivat mukautettujen objektien käyttäytymisen samalla tavalla kuin sisäänrakennetut Python-tyypit.

Tässä artikkelissa keskitymme tehokkaisiin dunder-toimintoihin. Selvitämme niiden tarkoitusta ja keskustelemme niiden käytöstä.

Olitpa Python-aloittelija tai kokenut ohjelmoija, tämän artikkelin tavoitteena on antaa sinulle kattava käsitys Dunderin toiminnoista, mikä tekee Python-koodauskokemuksestasi tehokkaampaa ja nautinnollisempaa.

Muista, että Pythonin taika ei piile vain sen yksinkertaisuudessa ja monipuolisuudessa, vaan myös sen tehokkaissa ominaisuuksissa, kuten Dunder-toiminnoissa.

__init__

Ehkä yksinkertaisin dunder-toiminto kaikista. Tämä on maaginen menetelmä, jota Python kutsuu automaattisesti aina, kun luomme (tai nimensä mukaisesti alustamme) uuden objektin.__init__

luokan pizza:
def __init__(itse, koko, täytteet):
itse.koko = koko
itse.täytteet = täytteet

# Luodaan nyt pizza
my_pizza = Pizza('iso', ['pippuri', 'sienet'])

print(my_pizza.size) # Tämä tulostaa: suuri
print(my_pizza.toppings) # Tämä tulostaa: ['pepperoni', 'sienet']

Tässä esimerkissä luodaan luokka nimeltä Pizza. Asetimme __init__-funktion sisältämään parametrit, jotka määritetään alustuksen yhteydessä, ja asetamme ne mukautetun objektimme ominaisuuksiksi.

Tässä sitä käytetään edustamaan luokan esiintymää. Joten kun kirjoitamme self.size = koko, sanomme: "Hei, tällä pizzaobjektilla on määritekoko size, ja haluan sen olevan sen kokoinen, minkä annoin objektia luodessaan."

__str__ ja __repr__

__Str__

Tämä on Pythonin taikamenetelmä, jonka avulla voimme defianna kuvaus mukautetulle tuotteellemme.

Kun tulostat objektin tai muunnat sen merkkijonoksi käyttämällä str(), Python tarkista, jos sinulla on defiOlen keksinyt menetelmän __str__ objektin luokalle.

Jos näin on, käytä tätä menetelmää objektin muuntamiseen merkkijonoksi.

Voimme laajentaa pizzaesimerkkiämme sisältämään toiminnon __str__ seuraavasti:

luokka Pizza: def __init__(itse, koko, täytteet): self.size = koko self.toppings = täytteet def __str__(self): return f"{self.size} pizza, jossa on {', '.join(self.toppings) )}" my_pizza = Pizza('suuri', ['pippuri', 'sienet']) print(oma_pizza) # Tämä tulostaa: Iso pizza pepperonilla, sieniä
__repr__

Funktio __str__ on enemmän epävirallinen tapa kuvata objektin ominaisuuksia. Toisaalta __repr__ käytetään tarjoamaan muodollisempi, yksityiskohtaisempi ja yksiselitteisempi kuvaus mukautetusta objektista.

Jos soitat repr() objektiin tai kirjoitat vain objektin nimen konsoliin, Python etsii menetelmää __repr__.

Se __str__ se ei ole definite, Python käyttää __repr__ varmuuskopiona, kun yrität tulostaa objektin tai muuntaa sen merkkijonoksi. Joten se on usein hyvä idea defiloppuun ainakin __repr__, vaikka et tekisi defitulee ulos __str__.

Näin voimme defisuorittaa loppuun __repr__ pizzaesimerkillemme:

luokan pizza:
def __init__(itse, koko, täytteet):
itse.koko = koko
itse.täytteet = täytteet

def __repr__(itse):
return f"Pizza('{self.size}', {self.toppings})"

my_pizza = Pizza('iso', ['pippuri', 'sienet'])
print(repr(oma_pizza)) # Tämä tulostaa: Pizza('suuri', ['pepperoni', 'sienet'])

__repr__ antaa sinulle merkkijonon, jonka voit suorittaa Python-komentona pizza-objektin luomiseksi uudelleen __str__ antaa sinulle inhimillisemmän kuvauksen. Toivottavasti se auttaa sinua pureskelemaan näitä dunder-menetelmiä hieman paremmin!

__lisätä__

Pythonissa me kaikki tiedämme, että on mahdollista lisätä numeroita käyttämällä operaattoria +, Kuten 3 + 5.

Mutta entä jos haluamme lisätä jonkin mukautetun objektin esiintymiä?

Dunder-toiminto __add__ se antaa meille mahdollisuuden tehdä juuri niin. Se antaa meille kyvyn defioperaattorin käyttäytymistä + henkilökohtaisissa tuotteissamme.

Johdonmukaisuuden vuoksi oletetaan, että haluamme defilopeta käyttäytyminen + pizzaesimerkissämme. Oletetaan, että aina kun lisäämme kaksi tai useampi pizza yhteen, se yhdistää automaattisesti kaikki niiden täytteet. Tältä se saattaa näyttää:

luokan pizza:
def __init__(itse, koko, täytteet):
itse.koko = koko
itse.täytteet = täytteet

def __add__(itse, muu):
jos ei isinstance (muu, pizza):
raise TypeError("Voit lisätä vain toisen pizzan!")
uudet_täytteet = itse.täytteet + muut.täytteet
palauta pizza (omakokoinen, uudet_täytteet)

# Tehdään kaksi pizzaa
pizza1 = Pizza('iso', ['pepperoni', "sienet"])
pizza2 = Pizza('iso', ['oliivit', "ananas"])

# Ja nyt "lisäätään" ne
yhdistetty_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Tämä tulostaa: ['pippuri', 'sienet', 'oliivit', 'ananas']

Samoin kuin dunder __add__, voimme myös defiViimeistele muut aritmeettiset funktiot, kuten __sub__ (vähennyksellä käyttämällä operaattoria -) Ja __mul__ (kertomista varten operaattorilla *).

__len__

Tämä dunder-menetelmä antaa meille mahdollisuuden defilopeta mikä toiminto on len() täytyy palauttaa räätälöityjä tuotteita varten.

Python käyttää len() saadaksesi tietorakenteen, kuten luettelon tai merkkijonon, pituuden tai koon.

Esimerkkimme yhteydessä voisimme sanoa, että pizzan "pituus" on siinä olevien täytteiden lukumäärä. Näin voimme toteuttaa sen:

luokan pizza:
def __init__(itse, koko, täytteet):
itse.koko = koko
itse.täytteet = täytteet

def __len__(itse):
paluulinssi (self. täytteet)

# Tehdään pizza
my_pizza = Pizza('iso', ['pepperoni', "sienet", "oliivit"])

print(len(my_pizza)) # Tämä tulostaa: 3

__len__-menetelmässä palautetaan vain luettelon pituus toppings. Nyt, len(my_pizza) se kertoo meille kuinka monta täytettä siinä on my_pizza.

__menettely__

Tämä dunder-menetelmä mahdollistaa objektien iteroitavuuden, eli sitä voidaan käyttää for-silmukassa.

Tämän tekemiseksi meidän on myös defilopeta toiminto __next__, Tätä käytetään defiSelvitä käyttäytyminen, jonka pitäisi palauttaa seuraava arvo iteraatiossa. Sen tulisi myös ilmoittaa iteroitavalle tapahtumalle, että sekvenssissä ei ole enää elementtejä. Yleensä saavutamme tämän tekemällä poikkeuksen StopIteration.

Oletetaan pizzaesimerkissämme, että haluamme toistaa täytteet. Voisimme tehdä pizzaluokistamme toistettavan defiälä anna menetelmää __iter__:

luokan pizza:
def __init__(itse, koko, täytteet):
itse.koko = koko
itse.täytteet = täytteet

def __iter__(itse):
itse.n = 0
palauta itsesi

def __seuraava__(itse):
jos itse.n < len(itse.täytteet):
tulos = self.topings[self.n]
itse.n += 1
palauttaa tuloksen
else:
nosta StopIteration

# Tehdään pizza
my_pizza = Pizza('iso', ['pepperoni', "sienet", "oliivit"])

# Ja nyt toistellaan sitä
täytteeksi my_pizzassa:
tulostaa (päällystys)

Tässä tapauksessa for-silmukka kutsuu __iter__, joka alustaa laskurin (self.n) ja palauttaa itse pizzaesineen (self).

Sitten for-silmukan kutsut __next__ saadaksesi jokaisen täytteen vuorotellen.

kun __next__ palautti kaikki mausteet, StopIteration se heittää poikkeuksen ja for-silmukka tietää nyt, että täytettä ei ole enää, joten se keskeyttää iteraatioprosessin.

Ercole Palmeri

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.
Tunnisteet: pytonkäärme

Viimeaikaiset artikkelit

Veeam tarjoaa kattavimman tuen kiristysohjelmille suojauksesta vastaukseen ja palautukseen

Veeamin Coveware tarjoaa jatkossakin kyberkiristystapahtumien reagointipalveluita. Coveware tarjoaa rikosteknisiä ja korjaavia ominaisuuksia…

Huhtikuu 23 2024

Vihreä ja digitaalinen vallankumous: Kuinka ennakoiva huolto muuttaa öljy- ja kaasuteollisuutta

Ennakoiva huolto mullistaa öljy- ja kaasualan innovatiivisella ja ennakoivalla lähestymistavalla laitosten hallintaan.…

Huhtikuu 22 2024

Ison-Britannian kilpailuviranomainen herättää BigTech-hälytyksen GenAI:sta

Britannian CMA on antanut varoituksen Big Techin käyttäytymisestä tekoälymarkkinoilla. Siellä…

Huhtikuu 18 2024

Casa Green: energiavallankumous kestävän tulevaisuuden puolesta Italiassa

Euroopan unionin rakennusten energiatehokkuuden parantamiseksi laatima "Green Houses" -asetus on saanut lainsäädäntöprosessinsa päätökseen…

Huhtikuu 18 2024