Articles

Python uye nzira dzepamberi, dunder mabasa ekugadzirisa zvirinani

Python inonakidza programming mutauro, uye sezvinoratidzwa na GitHub, zvakare mutauro wechipiri unonyanya kufarirwa muna 2022.

Mabhenefiti anonyanya kunakidza ePython inharaunda yakakura yevagadziri.

Zvinoita sePython ine pasuru yechero kesi yekushandisa.

Munyika yakakura yePython programming, pane seti yezvimiro izvo zvinowanzoenda zvisingaonekwe nevanotanga, asi zvine kukosha kwakakosha muecosystem yemutauro.

Nzira dzemashiripiti igadziriro yenzira dzekaredefinites muPython inopa akakosha mashandisirwo emhando. Ivo vanozivikanwa nyore nyore nemadhidhi avo maviri pakutanga uye kumagumo, senge __init__, __call__, __len__ … etc.

Mashiripiti Nzira

Nzira dzemashiripiti dzinobvumira zvinhu zvetsika kuita zvakafanana neakavakirwa-muPython marudzi.

Muchikamu chino, tichatarisa pane ane simba dunder mabasa. Tichaongorora chinangwa chavo uye tokurukura nezvekushandisa kwavo.

Kunyangwe iwe uri Python novice kana ane ruzivo programmer, chinyorwa ichi chine chinangwa chekukupa iwe kunzwisisa kwakadzama kweDunder mabasa, zvichiita kuti yako Python coding chiitiko chinyatsoshanda uye chinakidze.

Rangarira, mashiripiti ePython haangori mukureruka uye kuita zvakasiyana-siyana, asiwo mune ayo ane simba maficha seDunder mabasa.

__init__

Zvichida iro rakanyanya kukosha basa rekuita pane ese. Iyi ndiyo nzira yemashiripiti iyo Python inodaidza otomatiki pese patinogadzira (kana sekureva kunoita zita, tanga) chinhu chitsva.__init__

Pizza yekirasi:
def __init__(pachako, saizi, toppings):
self.size = saizi
self.toppings = toppings

# Zvino ngatigadzirei pizza
my_pizza = Pizza('guru', ['pepperoni', 'howa'])

dhinda(yangu_pizza.size) # Izvi zvichadhinda: hombe
dhinda(my_pizza.toppings) # Izvi zvichadhinda: ['pepperoni', 'howa']

Mumuenzaniso uyu, kirasi inonzi Pizza inogadzirwa. Isu tinoseta yedu __init__ basa rekubatanidza ma paramita anotsanangurwa panguva yekutanga, uye toamisa sezvivakwa zvechivanhu chedu.

Pano, rinoshandiswa kumiririra muenzaniso wekirasi. Saka kana tichinyora self.size = saizi, tiri kuti, "Hei, chinhu chepizza ichi chine saizi size, uye ndinoda kuti ive chero saizi yandakapa pandakagadzira chinhu”.

__str__ uye __repr__

__Str__

Iyi ndiyo nzira yemashiripiti yePython inotitendera defindish tsananguro yechinhu chedu chetsika.

Paunodhinda chinhu kana kuchishandura kuita tambo uchishandisa str(), Python tarisa kana uine defiNdauya neimwe nzira __str__ yekirasi yechinhu ichocho.

Kana zvakadaro, shandisa nzira iyoyo kushandura chinhu kuita tambo.

Tinogona kuwedzera muenzaniso wedu wePizza kuti ubatanidze basa __str__ zvinotevera:

class Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): return f"A {self.size} pizza ine {', '.join(self.toppings )}" my_pizza = Pizza('hombe', ['pepperoni', 'howa']) print(my_pizza) # Izvi zvichadhindwa: Pizza hombe ine pepperoni, howa
__repr__

Iyo __str__ basa rinonyanya nzira isina kurongeka yekutsanangura maitiro echinhu. Nekune rimwe divi, __repr__ inoshandiswa kupa rondedzero, yakadzama uye isina kujeka yechinhu chetsika.

Kana ukafona repr() pachinhu kana iwe unongonyora zita rechinhu mukoni, Python ichatsvaga nzira __repr__.

Se __str__ hazvisi definite, Python ichashandisa __repr__ se backup paunenge uchiedza kudhinda chinhu kana kuchishandura kuita tambo. Saka kazhinji ipfungwa yakanaka defikupedza zvishoma __repr__, kunyange ukasadaro defizvakanaka __str__.

Hezvino zvataigona defifinish __repr__ yemuenzaniso wedu wepizza:

Pizza yekirasi:
def __init__(pachako, saizi, toppings):
self.size = saizi
self.toppings = toppings

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

my_pizza = Pizza('guru', ['pepperoni', 'howa'])
dhinda(repr(my_pizza)) # Izvi zvichadhinda: Pizza('hombe', ['pepperoni', 'howa'])

__repr__ inokupa tambo yaunogona kumhanya sePython yekuraira kudzoreredza chinhu chepizza, nepo __str__ inokupa imwe tsananguro yevanhu. Ndinovimba inokubatsira kutsenga idzi dunder nzira zvirinani!

__wedzera__

MuPython, isu tese tinoziva kuti zvinokwanisika kuwedzera nhamba uchishandisa opareta +, uya 3 + 5.

Asi zvakadini kana tichida kuwedzera zviitiko zvechimwe chinhu chetsika?

Iyo dunder basa __add__ kunotibvumira kuita izvozvo chaizvo. Inotipa kugona defibvisa maitiro emushandisi + pazvinhu zvedu zvemunhu.

Mukuda kwekuenderana, ngatifungei kuti tinoda kudaro defikupedza maitiro e + pamuenzaniso wedu wepizza. Ngatitii pese patinowedzera maviri kana anopfuura mapizza pamwe chete, inongosanganisa iwo ese ematoppings. Hezvino zvingaratidzika:

Pizza yekirasi:
def __init__(pachako, saizi, toppings):
self.size = saizi
self.toppings = toppings

def __add__(iwe, zvimwe):
kana zvisiri semuenzaniso (zvimwe, Pizza):
simudza TypeError("Unogona kungowedzera imwe Pizza!")
new_toppings = self.toppings + other.toppings
return Pizza(self.size, new_toppings)

# Ngatigadzirei mapizza maviri
pizza1 = Pizza('guru', ['pepperoni', 'howa'])
pizza2 = Pizza('hombe', ['maorivhi', 'pineapple'])

# Uye zvino ngati "vawedzere" ivo
yakasanganiswa_pizza = pizza1 + pizza2

dhinda(combined_pizza.toppings) # Izvi zvichadhinda: ['pepperoni', 'howa', 'maorivhi', 'pineapple']

Zvakafanana ne dunder __add__, tinogonawo defikupedza mamwe mabasa arithmetic akadai __sub__ (nekubvisa uchishandisa mushandisi -e __mul__ (yekuwedzera uchishandisa opareta *).

__le__

Iyi dunder nzira inotibvumira defikupedza basa racho len() inofanira kudzoka kune yedu yakagadzirirwa zvinhu.

Python inoshandisa len() kuwana hurefu kana saizi ye data data senge runyoro kana tambo.

Muchirevo chemuenzaniso wedu, tinogona kutaura kuti "kureba" kwepizza nhamba yezvipfeko zvainazvo. Heano maitirwo atingaite:

Pizza yekirasi:
def __init__(pachako, saizi, toppings):
self.size = saizi
self.toppings = toppings

def __len__(iwe):
return len(self.toppings)

# Ngatigadzirei pizza
my_pizza = Pizza('guru', ['pepperoni', 'howa', 'maorivhi'])

dhinda(len(yangu_pizza)) # Izvi zvichadhinda: 3

Munzira ye __len__, tinongodzorera kureba kwechinyorwa toppings. Zvino, len(my_pizza) ichatiudza kuti mapepi mangani ari pairi my_pizza.

_ maitiro __

Iyi dunder nzira inobvumira zvinhu kuti zvigone kugoneka, kureva kuti inogona kushandiswa mune loop.

Kuti tiite izvi, tinofanirawo defikupedza basa __next__, Izvi zvinoshandiswa definish maitiro anofanirwa kudzosera kukosha kunotevera muiteration. Inofanirawo kuratidza iyo iterable pachiitiko chekuti hapasisina zvinhu munhevedzano. Isu tinowanzo zadzisa izvi nekukanda kusarudzika StopIteration.

Zvemuenzaniso wedu wepizza, ngatiti isu tinoda kudzokorora ma toppings. Tinogona kuita kuti kirasi yedu yePizza iite definendo a method __iter__:

Pizza yekirasi:
def __init__(pachako, saizi, toppings):
self.size = saizi
self.toppings = toppings

def __iter__(pachako):
self.n = 0
dzokera iwe

def __inotevera__(pachako):
if self.n < len(self.toppings):
result = self.toppings[self.n]
self.n += 1
return result
zvimwe:
simudza StopIteration

# Ngatigadzirei pizza
my_pizza = Pizza('guru', ['pepperoni', 'howa', 'maorivhi'])

# Uye zvino ngatidzokororei pamusoro pazvo
yekukwirisa mu_pizza yangu:
dhinda (topping)

Mune ino kesi, iyo yeloop mafoni __iter__, iyo inotanga counter (self.n) uye inodzorera chinhu chepizza pachacho (self).

Zvadaro, iyo ye loop inofona __next__ kuti uwane topping imwe neimwe.

apo __next__ akadzoka zviyo zvese, StopIteration inokanda mutsauko uye iyo ye loop ikozvino inoziva kuti hapasisina toppings uye saka ichabvisa iyo iteration maitiro.

Ercole Palmeri

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.
Tags: python

Zvinyorwa zvekare

Veeam inoratidzira yakanyatso tsigiro yerudzikinuro, kubva padziviriro kusvika pakupindura uye kupora

Coveware neVeeam icharamba ichipa cyber kubira chiitiko mhinduro masevhisi. Coveware ichapa forensics uye kugadzirisa kugona…

23 April 2024

Green uye Digital Revolution: Sei Predictive Maintenance iri Kushandura Oiri & Gasi Indasitiri

Kufanofungidzira kugadzirisa kuri kushandura chikamu cheoiri & gasi, nemaitiro matsva uye akasimba ekutarisira zvidyarwa.…

22 April 2024

UK antitrust regulator inosimudza BigTech alarm pamusoro peGenAI

Iyo UK CMA yakapa yambiro nezvemaitiro eBig Tech mumusika wehungwaru hwekugadzira. Ikoko…

18 April 2024

Casa Green: shanduko yesimba kune ramangwana rakagadzikana muItari

Chirevo che "Case Green", chakagadzirwa neEuropean Union kuti chiwedzere kushanda nesimba kwezvivakwa, chapedza hurongwa hwayo hwemutemo ne…

18 April 2024