Objektorienteeritud programmeerimise maailmas on tavaline probleem tegeleda klassidega, millel pole objektiliikmeid. Selline olukord võib sageli põhjustada segadust ja võimalikke programmeerimisprobleeme. Selles artiklis uurime probleemi ja pakume Pythoni abil lahendust koos koodi samm-sammulise selgitusega. Lisaks käsitleme seotud teeke ja funktsioone, mis võivad sarnaste stsenaariumide korral aidata. Alustame oma probleemi sügavama mõistmisega ja seejärel süveneme nõutavasse lahendusse.
Pythonis määratletakse klassid sageli atribuutide ja meetoditega, mida jagatakse klassist genereeritud objektide vahel. Mõnikord ei pruugi klassil aga olla ühtegi objektiliiget, mis võib muuta sellega töötamise keeruliseks. See probleem ilmneb tavaliselt siis, kui klassi kasutatakse ainult objekti olekust mitte sõltuvate meetodite konteinerina. Arendajatena on oluline mõista, kuidas sellistes olukordades tõhusalt ümber töötada.
Pythoni klasside mõistmine
Käsitletava probleemi paremaks mõistmiseks tutvume kõigepealt Pythoni klasside ja nende atribuutidega. Pythoni klass on objektide loomise plaan ja see on sisuliselt kogumik muutujad ja funktsioonid. Muutujad, mida sageli nimetatakse atribuutideks, määravad, mida objekt esindab, samas kui funktsioonid, mida nimetatakse meetoditeks, määravad, kuidas objekt käitub. Tavaliselt on klassil objektispetsiifilised atribuudid, kuid meie praegune väljaanne käsitleb juhtumeid, kus see pole ette antud. Niisiis, töötame selle kallal.
Lahenduse rakendamine
Objektiliikmeteta klasside käsitlemise lahendus seisneb meetodite määratlemises kui staatilised meetodid. Seda tehes saame tagada, et need meetodid on seotud klassiga, mitte ühegi konkreetse objektiga. See tähendab, et neid saab kutsuda klassi enda, mitte klassi eksemplari kaudu. Siin on näide:
class Utility:
@staticmethod
def print_hello():
print("Hello, World!")
Utility.print_hello() # Output: Hello, World!
Ülaltoodud näites määratleme klassi Kasulikkus ilma objektispetsiifiliste atribuutideta. Meetod print_tere() on määratletud kui staatiline meetod, mis kasutab @staticmethod dekoraator. See võimaldab meil helistada print_tere() meetodit otse klassis, ilma eksemplare loomata.
Analüüsime nüüd koodi juurutamist samm-sammult. Esiteks määratleme klassi nimega Kasulikkus ilma objektiliikmeteta. Järgmisena kasutame @staticmethod dekoraator, et näidata, et järgmist meetodit tuleks käsitleda staatilise meetodina. Lõpuks määratleme print_tere() funktsiooni klassis ja kutsuge see otse, kasutades klassi nime, ilma eksemplari vajamata.
Kokkuvõtteks võib öelda, et klassidega, millel pole objektliikmeid, saab lihtsamaks muuta Pythonis staatiliste meetodite võimsuse ärakasutamine. Määrates meetodid staatilisteks, saab neid objekteksemplari asemel kutsuda klassi enda kaudu ja säilitada siiski koodi mõtestatud korraldus. Pythoni programmide tõhususe ja loetavuse suurendamiseks on oluline seda tehnikat mõista.