Toimintojen ylikuormitusta ei ehkä ole sisäänrakennettu Pythonissa, mutta on olemassa tapoja jäljitellä sitä.

Funktioiden ylikuormitus on joissakin ohjelmointikielissä ominaisuus, jonka avulla voit määrittää saman funktion muunnelmia. Jokaisella versiolla on sama nimi, mutta erilaiset toteutukset ja yksilölliset funktioiden allekirjoitukset.

Tämän tekniikan avulla voit suorittaa erilaisia ​​toimintoja funktiolle välitettyjen argumenttien tyypin ja lukumäärän perusteella.

Toisin kuin kielet, kuten C++ ja Java, Python ei tue oletuksena toimintojen ylikuormitusta, mutta on olemassa tapoja saavuttaa samanlainen toiminnallisuus.

Kuinka Python käsittelee toimintojen ylikuormitusta?

Pythonissa voit määrittää saman funktion useammin kuin kerran eri parametreilla, tietotyypeillä tai molemmilla jokaisessa määritelmässä. Python tunnistaa kuitenkin vain funktion viimeisen määritelmän, kun kutsut sitä. Tässä on esimerkki:

defarithmetics(a, b):
return a - b

defarithmetics(a, b, c, d):
return a + b - c * d

print(arithmetics(

instagram viewer
1, 2, 3, 5)) # returns -12
print(arithmetics(1, 2)) # returns missing positional arguments error

Oliopohjaiset kielet, kuten Java, tukevat usein toimintojen ja menetelmien ylikuormitusta. Metodi on yksinkertaisesti funktio, jonka määrittelet luokan sisällä.

Yllä olevassa koodissa Python tunnistaa vain toisen määritelmän aritmetiikka () toimintoa, kun yrität kutsua sitä projektissasi. Jos yrität kutsua funktiota kahdella ensin määritellyllä argumentilla, saat virheilmoituksen, jossa lukee "pakolliset paikkaargumentit puuttuvat".

Et saa virheilmoitusta, kun kutsut funktiota neljällä argumentilla. Tämä tarkoittaa, että Python on korvannut toiminnon uusimmalla esiintymisellään. Tämä ei ole ylikuormitusta, joten sinun on puututtava siihen.

Python ei siis käsittele toimintojen ylikuormitusta oletusarvoisesti, mutta on joitain temppuja, joiden avulla voit simuloida sen toimintaa ohjelmissasi.

Tapa 1: Valinnaisten parametrien tai oletusargumenttien käyttäminen

Voit saavuttaa ylikuormituksen määrittämällä funktion oletusargumenteilla. Tässä on esimerkki:

defarithmetics(a, b=0, c=0):

Arguments:
a: The first number.
b: The second number (optional).
c: The third number (optional).

return a - b + c

Tällä funktiolla on kolme parametria, mutta kahdella niistä on oletusarvot. Tämä tarkoittaa, että voit kutsua sitä yhdestä kolmeen argumentilla:

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns -3
print(arithmetics(10, 3, 4)) # returns 11

Vaikka tämän lähestymistavan avulla voit kutsua funktiota useilla eri tavoilla, se ei ole kovin tehokasta pitkällä aikavälillä. Tässä on joitain sen rajoituksista:

  • Voit välittää vain argumentteja, jotka ovat joko kokonaislukuja tai liukulukuja.
  • Toiminnon käyttäytymisessä ei ole tapahtunut merkittävää muutosta. Et esimerkiksi voi muuttaa sen toimintaa laskeaksesi muodon pinta-alan tai edes tulostaaksesi Hei maailma.

Tapa 2: Muuttujaargumenttien käyttö

Jos haluat käyttää muuttuvia argumentteja funktion ylikuormitukseen Pythonissa, sinun tulee sisällytä args-parametri, kun määrität funktiota. The args parametrin avulla voit välittää useita sijaintiargumentteja kutsuessasi funktiota. Tässä on esimerkki:

defarithmetics(a, *args):

Arguments:
a: The first number.
*args: A variable number of arguments (optional).

args_sum = 0

for num in args:
args_sum *= num

return a - args_sum

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns 2
print(arithmetics(10, 3, 4, 2, 4, 6)) # returns 10

Yllä oleva funktio ottaa kaksi argumenttia: pakollinen argumentti, jota kutsutaan a ja args argumentti, jonka avulla voit syöttää niin monta argumenttia kuin tarvitset.

Vaikka yllä oleva funktio voi ottaa useita argumentteja, se voi suorittaa kertolaskutoiminnon vain muuttujan argumenteille, eli argumenteille, joita edustaa args avainsana.

Jos haluat suorittaa useita toimintoja, sinun on tehtävä lisää koodiisi ehdollisia lausekkeita, ja tästä voi tulla nopeasti monimutkainen.

Tapa 3: Multiple Dispatch Decoratorin käyttö

Useiden lähetysten koristelu on Python-kirjasto, jonka avulla voit määrittää yhden funktion useita toteutuksia tai esiintymiä sen argumenttien tyypin perusteella. Tämä tarkoittaa, että voit määrittää saman funktion eri tietotyypeille ja muuttaa sen toimintaa kokonaan.

Voit käyttää useiden lähetysten koristelua seuraavasti:

  1. Asentaa multidispath Python-ympäristössäsi:
    pip install multipledispatch
  2. Koristele toimintosi (funktiot) -merkillä @lähettää sisustusarkkitehti. The @lähettää sisustaja on a Python sisustaja jonka avulla voit toteuttaa useita lähetyksiä. Se lähettää automaattisesti sopivan funktion sille välitettyjen argumenttien perusteella. Voit käyttää @lähettää sisustaja seuraamalla tätä mallia:
    from multipledispatch import dispatch

    @dispatch(data type1, data type2, data typeX)
    defyour_function(a, b, c, x):
    pass
    # perform your operations here

Tässä on esimerkki, joka käyttää usean lähetyksen koristelua toimintojen ylikuormitukseen Pythonissa:

from multipledispatch import dispatch

@dispatch(int, int)
defadd(a, b):

Arguments:
a: Any integer.
b: Any integer.

return a + b

@dispatch(int, list)
defadd(a, b):

Arguments:
a: Any integer.
b: Any Python list.

b.append(a)
return b

# returns 3
print(add(1, 2))

# returns [2, 3, 4, 5, 'w', 'done', 1]
print(add(1, [2, 3, 4, 5, 'w', 'done']))

Yllä oleva koodinpätkä määrittelee kaksi esiintymää lisätä() toiminto. Ensimmäinen esiintymä ottaa kaksi kokonaislukua argumenteiksi ja palauttaa niiden summan.

Sillä välin tämän funktion toinen versio ottaa kokonaisluvun ja luettelon. Se lisää kokonaisluvun luetteloon ja palauttaa uuden luettelon.

Tämä lähestymistapa toimintojen ylikuormitukseen Pythonissa antaa sinulle paljon joustavuutta, varsinkin jos sinun on muutettava menetelmäsi toimintaa. Voit oppia lisää osoitteesta useita lähetysasiakirjoja.

Paras lähestymistapa toimintojen ylikuormitukseen Pythonissa

Toimintatavan ylikuormitukseen käyttämäsi lähestymistavan pitäisi riippua siitä, mitä yrität saavuttaa. Jos pystyt suorittamaan tehtäväsi käyttämällä oletus- tai muuttuvia argumentteja, useiden lähetysten koristelu saattaa olla ylivoimainen. Usein lähetyskoriste on kuitenkin yleensä paras vaihtoehto tehokkuutensa ja tarkkuutensa vuoksi.

Tämä koristelu tarjoaa puhtaan ja joustavan tavan toteuttaa toimintojen ylikuormitus Pythonissa. Sen avulla voit määrittää useita yksittäisen funktion toteutuksia sen argumenttien tyypin perusteella.

Tällä lähestymistavalla voit luoda joustavia funktioita, jotka voivat hyväksyä erilaisia ​​parametrityyppejä ilman monimutkaisia ​​ehtolausekkeita.