Cikkek

Python és fejlett módszerek, dunder funkciók a jobb programozás érdekében

A Python egy fantasztikus programozási nyelv, és ezt bizonyítja GitHub, egyben a második legnépszerűbb nyelv 2022-ben.

A Python legérdekesebb előnyei a programozók nagy közössége.

Úgy tűnik, a Pythonnak van csomagja minden felhasználási esetre.

A Python programozás hatalmas világában van egy sor olyan funkció, amelyet a kezdők gyakran észre sem vesznek, mégis jelentős jelentőséggel bírnak a nyelv ökoszisztémájában.

A mágikus módszerek az előmódszerek halmazadefinites a Pythonban, amelyek speciális szintaktikai szolgáltatásokat biztosítanak. Könnyen felismerhetők az elején és végén lévő kettős kötőjelükről, pl __init__, __call__, __len__ … stb.

A mágikus módszerek

A mágikus módszerek lehetővé teszik, hogy az egyéni objektumok a beépített Python-típusokhoz hasonlóan viselkedjenek.

Ebben a cikkben a hatékony dunder funkciókra fogunk összpontosítani. Feltárjuk céljukat, és megbeszéljük a felhasználásukat.

Legyen szó kezdő Python-programozóról vagy tapasztalt programozóról, ennek a cikknek az a célja, hogy átfogó ismereteket nyújtson a Dunder-funkciókról, ezáltal hatékonyabbá és élvezetesebbé téve Python-kódolási élményét.

Ne feledje, a Python varázsa nemcsak egyszerűségében és sokoldalúságában rejlik, hanem olyan erőteljes funkcióiban is, mint a Dunder-funkciók.

__init__

Talán a legalapvetőbb dunder funkció az összes közül. Ez az a varázslatos módszer, amelyet a Python automatikusan meghív, amikor létrehozunk (vagy ahogy a neve is sugallja, inicializálunk) egy új objektumot.__init__

osztály pizza:
def __init__(ön, méret, feltétek):
self.size = méret
öntetek = feltétek

# Most készítsünk egy pizzát
my_pizza = Pizza('nagy', ['pepperoni', 'gomba'])

print(my_pizza.size) # Ez a következőt írja ki: nagy
print(my_pizza.toppings) # Ez kiírja: ['pepperoni', 'gomba']

Ebben a példában egy Pizza nevű osztály jön létre. Az __init__ függvényünket úgy állítjuk be, hogy tartalmazza az inicializáláskor megadandó paramétereket, és beállítsuk azokat az egyéni objektumunk tulajdonságaiként.

Itt az osztály példányának ábrázolására szolgál. Tehát amikor azt írjuk, hogy self.size = méret, akkor azt mondjuk: "Hé, ennek a pizza objektumnak van egy mérete attribútum size, és azt szeretném, hogy bármilyen méretű legyen, amit megadtam az objektum létrehozásakor”.

__str__ és __repr__

__Str__

Ez a Python varázslatos módszere, amely lehetővé teszi számunkra defikészítsen leírást egyedi termékünkhöz.

Amikor kinyomtat egy objektumot, vagy karakterláncsá alakítja a használatával str(), Python ellenőrizze, ha van defiKitaláltam egy módszert __str__ az objektum osztályához.

Ha igen, használja ezt a módszert az objektum karakterláncsá alakításához.

A Pizza példánkat kiterjeszthetjük egy funkcióval __str__ az alábbiak szerint:

osztály Pizza: def __init__(ön, méret, feltétek): self.size = méret self.toppings = feltétek def __str__(self): return f"Egy {self.size} pizza {', '.join(self.toppings) )}" my_pizza = Pizza('nagy', ['pepperoni', 'gomba']) print(my_pizza) # Ez a következőt fogja nyomtatni: Egy nagy pizza pepperonival, gombával
__repr__

Az __str__ függvény inkább egy informális módszer egy objektum tulajdonságainak leírására. Másrészt a __repr__ az egyéni objektum formálisabb, részletesebb és egyértelműbb leírását szolgálja.

Ha hívsz repr() egy objektumon, vagy egyszerűen beírja az objektum nevét a konzolba, a Python metódusokat fog keresni __repr__.

Se __str__ ez nem definite, a Python fogja használni __repr__ biztonsági másolatként, amikor megpróbálja kinyomtatni az objektumot vagy karakterláncsá alakítani. Szóval ez gyakran jó ötlet defilegalább befejezni __repr__, még ha nem is defikijön __str__.

Íme, hogyan tudnánk defiBefejez __repr__ pizza példánkhoz:

osztály pizza:
def __init__(ön, méret, feltétek):
self.size = méret
öntetek = feltétek

def __repr__(self):
return f"Pizza('{self.size}', {self.feltöltések})"

my_pizza = Pizza('nagy', ['pepperoni', 'gomba'])
print(repr(my_pizza)) # Ez a következőt írja ki: Pizza('nagy', ['pepperoni', 'gomba'])

__repr__ egy karakterláncot ad, amelyet Python-parancsként futtathat a pizza objektum újbóli létrehozásához, míg __str__ emberibb leírást ad. Remélem, segít egy kicsit jobban megrágni ezeket a dunder módszereket!

__hozzáadás__

A Pythonban mindannyian tudjuk, hogy lehetséges számokat hozzáadni az operátor segítségével +, As 3 + 5.

De mi van akkor, ha valamilyen egyéni objektum példányait szeretnénk hozzáadni?

A dunder funkció __add__ éppen ezt teszi lehetővé számunkra. Lehetőséget ad nekünk arra defia kezelő viselkedését + személyre szabott termékeinken.

A következetesség érdekében tegyük fel, hogy ezt akarjuk defifejezze be a viselkedését + pizza példánkon. Tegyük fel, hogy amikor két vagy több pizzát adunk össze, az automatikusan egyesíti az összes feltétet. Így nézhet ki:

osztály pizza:
def __init__(ön, méret, feltétek):
self.size = méret
öntetek = feltétek

def __add__(saját, egyéb):
ha nem isinstance (egyéb, pizza):
raise TypeError("Csak újabb pizzát adhatsz hozzá!")
new_toppings = self.feltöltések + egyéb.feltöltések
return Pizza (saját.méret,új_feltétek)

# Készítsünk két pizzát
pizza1 = Pizza('nagy', ['pepperoni', 'gomba'])
pizza2 = Pizza('nagy', ['olívabogyó', 'ananász'])

# És most "adjuk hozzá" őket
kombinált_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Ez a következőket írja ki: ['pepperoni', 'gomba', 'olíva', 'ananász']

Hasonlóan a dunderhez __add__, mi is tudunk defimás aritmetikai függvények befejezése, mint pl __sub__ (kivonással az operátor használatával -) És __mul__ (az operátor használatával történő szorzáshoz *).

__len__

Ez a dunder módszer lehetővé teszi számunkra defifejezze be, mi a funkciója len() vissza kell térnie az egyedi termékeinkért.

Python használ len() egy adatstruktúra, például lista vagy karakterlánc hosszának vagy méretének lekéréséhez.

Példánkkal összefüggésben azt mondhatnánk, hogy egy pizza "hossza" a benne lévő feltétek száma. Így tudjuk megvalósítani:

osztály pizza:
def __init__(ön, méret, feltétek):
self.size = méret
öntetek = feltétek

def __len__(ön):
visszatérő lencse(önfeltöltések)

# Készítsünk egy pizzát
my_pizza = Pizza('nagy', ['pepperoni', 'gomba', 'olívabogyó'])

print(len(my_pizza)) # Ez kiírja: 3

A __len__ metódusban csak a lista hosszát adjuk vissza toppings. Most, len(my_pizza) megmondja, hány feltét van rajta my_pizza.

__ folyamat __

Ez a dunder metódus lehetővé teszi az objektumok iterálhatóságát, azaz for ciklusban használható.

Ehhez nekünk is meg kell defifejezze be a funkciót __next__, Ezt használják definish a viselkedés, amelynek vissza kell adnia a következő értéket az iterációban. Azt is jeleznie kell az iterálható eseménynek, ha nincs több elem a sorozatban. Ezt általában úgy érjük el, hogy kivételt dobunk StopIteration.

Tegyük fel, hogy a pizzapéldánkban meg akarjuk ismételni a feltéteket. Megismételhetővé tehetjük a pizza osztályunkat definendo egy módszert __iter__:

osztály pizza:
def __init__(ön, méret, feltétek):
self.size = méret
öntetek = feltétek

def __iter__(self):
saját.n = 0
adja vissza önmagát

def __next__(self):
if self.n < len(self.feltöltések):
eredmény = self.toppings[self.n]
saját.n += 1
vissza az eredményt
más:
emelje fel a StopIteration-t

# Készítsünk egy pizzát
my_pizza = Pizza('nagy', ['pepperoni', 'gomba', 'olívabogyó'])

# És most ismételjük át
a my_pizza feltöltéséhez:
nyomtatás (feltöltés)

Ebben az esetben a for ciklus hív __iter__, amely inicializál egy számlálót (self.n) és visszaadja magát a pizza tárgyat (self).

Ezután a for hurok hívások __next__ hogy minden feltétet sorra kapjon.

amikor __next__ visszaadta az összes fűszert, StopIteration kivételt dob, és a for ciklus most már tudja, hogy nincs több feltöltés, így megszakítja az iterációs folyamatot.

Ercole Palmeri

Innovációs hírlevél
Ne maradjon le az innovációval kapcsolatos legfontosabb hírekről. Regisztráljon, hogy megkapja őket e-mailben.
Címkék: piton

Friss cikkek

A színező oldalak előnyei gyerekeknek – a varázslatok világa minden korosztály számára

A finom motoros készségek színezéssel történő fejlesztése felkészíti a gyerekeket olyan összetettebb készségekre, mint az írás. Kiszínezni…

Május 2 2024

A jövő itt van: Hogyan forradalmasítja a hajózási ágazat a globális gazdaságot

A haditengerészeti szektor igazi világgazdasági hatalom, amely egy 150 milliárdos piac felé navigált...

Május 1 2024

A kiadók és az OpenAI megállapodásokat írnak alá a mesterséges intelligencia által feldolgozott információáramlás szabályozására

Múlt hétfőn a Financial Times bejelentette, hogy megállapodást köt az OpenAI-val. Az FT engedélyezi világszínvonalú újságírását…

30 április 2024

Online fizetés: Így fizethet örökké a streaming szolgáltatások

Emberek milliói fizetnek a streaming szolgáltatásokért, havi előfizetési díjat fizetve. Általános vélemény, hogy Ön…

29 április 2024