Članci

Python i napredne metode, dunder funkcije za bolje programiranje

Python je fantastičan programski jezik, a kao što svjedoči GitHub, također je drugi najpopularniji jezik u 2022.

Najzanimljivija prednost Pythona je velika zajednica programera.

Čini se da Python ima paket za svaki slučaj upotrebe.

U golemom svijetu programiranja Pythona postoji niz značajki koje početnici često prođu nezapaženo, a ipak imaju značajnu važnost u ekosustavu jezika.

Čarobne metode su skup prethodnih metodadefinites u Pythonu koji pružaju posebne sintaktičke značajke. Lako ih je prepoznati po duplim crticama na početku i na kraju, npr __init__, __call__, __len__ … itd.

Čarobne metode

Čarobne metode omogućuju prilagođenim objektima da se ponašaju slično ugrađenim tipovima Pythona.

U ovom ćemo se članku usredotočiti na moćne dunder funkcije. Istražit ćemo njihovu svrhu i razgovarati o njihovoj upotrebi.

Bilo da ste početnik u Pythonu ili iskusni programer, cilj ovog članka je pružiti vam sveobuhvatno razumijevanje funkcija Dundera, čineći vaše iskustvo kodiranja u Pythonu učinkovitijim i ugodnijim.

Zapamtite, magija Pythona ne leži samo u njegovoj jednostavnosti i svestranosti, već iu njegovim moćnim značajkama kao što su Dunder funkcije.

__init__

Možda najosnovnija dunder funkcija od svih. Ovo je čarobna metoda koju Python automatski poziva kad god stvorimo (ili kako naziv sugerira, inicijaliziramo) novi objekt.__init__

klasa Pizza:
def __init__(self, size, toppings):
self.size = veličina
sam.preljevi = preljevi

# Sada napravimo pizzu
my_pizza = Pizza('velika', ['feferoni', 'gljive'])

print(my_pizza.size) # Ovo će ispisati: veliko
print(my_pizza.toppings) # Ovo će ispisati: ['feferoni', 'gljive']

U ovom primjeru kreirana je klasa pod nazivom Pizza. Postavili smo našu __init__ funkciju da uključi parametre koje treba specificirati u vrijeme inicijalizacije i postavili smo ih kao svojstva za naš prilagođeni objekt.

Ovdje se koristi za predstavljanje instance klase. Dakle, kada napišemo self.size = size, kažemo: "Hej, ovaj objekt za pizzu ima atribut size size, i želim da bude bilo koje veličine koju sam naveo kada sam kreirao objekt”.

__str__ i __repr__

__Str__

Ovo je Pythonova čarobna metoda koja nam omogućuje defidonesite opis za našu prilagođenu stavku.

Kada ispisujete objekt ili ga pretvarate u niz pomoću str(), Python provjerite ako imate defiSmislio sam metodu __str__ za klasu tog objekta.

Ako je tako, upotrijebite tu metodu za pretvaranje objekta u niz.

Možemo proširiti naš primjer pizze da uključi funkciju __str__ kako slijedi:

class Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): return f"A {self.size} pizza sa {', '.join(self.toppings )}" my_pizza = Pizza('large', ['pepperoni', 'mushrooms']) print(my_pizza) # Ovo će ispisati: Velika pizza s feferonima, gljivama
__repr__

Funkcija __str__ više je neformalan način opisivanja svojstava objekta. S druge strane, __repr__ se koristi za pružanje formalnijeg, detaljnijeg i nedvosmislenog opisa prilagođenog objekta.

Ako nazoveš repr() na objektu ili samo upišete naziv objekta u konzolu, Python će potražiti metodu __repr__.

Se __str__ nije definite, Python će koristiti __repr__ kao rezervna kopija kada pokušavate ispisati objekt ili ga pretvoriti u niz. Stoga je to često dobra ideja defizavrši barem __repr__, čak i ako nemate defiizlazi __str__.

Evo kako bismo mogli defiZavrši __repr__ za naš primjer pizze:

klasa Pizza:
def __init__(self, size, toppings):
self.size = veličina
sam.preljevi = preljevi

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

my_pizza = Pizza('velika', ['feferoni', 'gljive'])
print(repr(my_pizza)) # Ovo će ispisati: Pizza('large', ['feferoni', 'mushrooms'])

__repr__ daje vam niz koji možete pokrenuti kao Python naredbu za ponovno stvaranje objekta pizza, dok __str__ daje vam ljudskiji opis. Nadam se da će vam pomoći da malo bolje prožvačete ove dunder metode!

__dodati__

U Pythonu svi znamo da je moguće zbrajati brojeve pomoću operatora +, Kao 3 + 5.

Ali što ako želimo dodati instance nekog prilagođenog objekta?

Dunderova funkcija __add__ omogućuje nam upravo to. Daje nam mogućnost da definish ponašanje operatera + na našim personaliziranim artiklima.

U interesu dosljednosti, pretpostavimo da to želimo defizavršiti ponašanje + na našem primjeru pizze. Recimo da kad god dodamo dvije ili više pizza zajedno, automatski će kombinirati sve njihove nadjeve. Evo kako bi to moglo izgledati:

klasa Pizza:
def __init__(self, size, toppings):
self.size = veličina
sam.preljevi = preljevi

def __add__(self, other):
ako nije isinstance(ostalo, pizza):
raise TypeError("Možete dodati samo još jednu pizzu!")
novi_preljevi = samo.preljevi + drugi.preljevi
return Pizza(self.size, new_toppings)

# Napravimo dvije pizze
pizza1 = Pizza('velika', ['feferoni', 'gljive'])
pizza2 = Pizza('velika', ['masline', 'ananas'])

# A sada ih "dodajmo".
kombinirana_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Ovo će ispisati: ['feferoni', 'gljive', 'masline', 'ananas']

Slično dunderu __add__, možemo i mi defizavršiti druge aritmetičke funkcije kao što su __sub__ (oduzimanjem pomoću operatora -) I __mul__ (za množenje pomoću operatora *).

__len__

Ova dunder metoda nam omogućuje da defizavršiti ono što funkcija len() mora se vratiti po naše prilagođene artikle.

Python koristi len() da biste dobili duljinu ili veličinu strukture podataka kao što je popis ili niz.

U kontekstu našeg primjera, mogli bismo reći da je "duljina" pizze broj nadjeva koji ima. Evo kako bismo to mogli implementirati:

klasa Pizza:
def __init__(self, size, toppings):
self.size = veličina
sam.preljevi = preljevi

def __len__(self):
povratak len(self.toppings)

# Kreirajmo pizzu
my_pizza = Pizza('velika', ['feferoni', 'gljive', 'masline'])

print(len(my_pizza)) # Ovo će ispisati: 3

U metodi __len__ vraćamo samo duljinu popisa toppings. Sada, len(my_pizza) reći će nam koliko je preljeva na njemu my_pizza.

__ postupak __

Ova dunder metoda omogućuje da se objekti mogu ponavljati, tj. može se koristiti u for petlji.

Da bismo to učinili, moramo također defizavršiti funkciju __next__, Ovo se koristi za defiuništite ponašanje koje bi trebalo vratiti sljedeću vrijednost u iteraciji. Također bi trebao signalizirati iterable u slučaju da više nema elemenata u nizu. To obično postižemo bacanjem iznimke StopIteration.

Za naš primjer pizze, recimo da želimo ponavljati nadjeve. Mogli bismo učiniti da se naš tečaj pizze ponavlja definendo metoda __iter__:

klasa Pizza:
def __init__(self, size, toppings):
self.size = veličina
sam.preljevi = preljevi

def __iter__(self):
samo.n = 0
vratiti sebe

def __next__(self):
if self.n < len(self.toppings):
rezultat = sam.preljevi[sebe.n]
sebe.n += 1
vratiti rezultat
drugo:
podići StopIteration

# Kreirajmo pizzu
my_pizza = Pizza('velika', ['feferoni', 'gljive', 'masline'])

# A sada ponovimo to
za nadjev u mojoj_pizzi:
print (preljev)

U ovom slučaju, poziva se for petlja __iter__, koji inicijalizira brojač (self.n) i vraća sam objekt pizze (self).

Zatim se poziva for petlja __next__ da dobijete svaki preljev redom.

kada __next__ vratio sve začine, StopIteration izbacuje iznimku i for petlja sada zna da više nema dodavanja i stoga će prekinuti proces ponavljanja.

Ercole Palmeri

Innovation newsletter
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate e-poštom.
Oznake: piton

Nedavni članci

Budućnost je ovdje: Kako pomorska industrija revolucionira globalnu ekonomiju

Pomorski sektor je prava globalna gospodarska sila, koja je krenula prema tržištu od 150 milijardi...

1 svibnja 2024

Izdavači i OpenAI potpisuju ugovore za reguliranje protoka informacija koje obrađuje umjetna inteligencija

Prošlog ponedjeljka, Financial Times je najavio dogovor s OpenAI-jem. FT licencira svoje novinarstvo svjetske klase...

Travnja 30 2024

Online plaćanja: Evo kako vas usluge strujanja tjeraju da plaćate zauvijek

Milijuni ljudi plaćaju usluge strujanja, plaćajući mjesečne pretplate. Uvriježeno je mišljenje da ste…

Travnja 29 2024

Veeam nudi najopsežniju podršku za ransomware, od zaštite do odgovora i oporavka

Coveware by Veeam nastavit će pružati usluge odgovora na incidente cyber iznude. Coveware će ponuditi forenziku i mogućnosti sanacije...

Travnja 23 2024