Pythonis võivad klassid aidata andmeid ja funktsioone korraga kokku panna. Meile on Python 3-s juba kirjutatud mitu klassi, mida nimetatakse built-insiks. Siin on mõned: int (täisarvu klass), str (stringi klass), list (loendiklass). See artikkel kasutab kodeerimise dokumentatsioonina pythoni koodi põhimõtet, nagu on määratletud jaotises Dokumendid kui kood.
1
Avage Python IDE. Saate teada, kuidas seda teha Pythoni installimise kaudu.
2
Kasutage märksõna klass, millele järgneb tühik, klassi nimi ja koolon.class Duck:
3
Tehke taane ja lisage klassi põhimuutujad. Selleks vajutage ↵ Enter või ⎠Return. Treenige ja kirjutage välja põhimuutuja, millele järgneb võrdusmärk ja seejärel teie muutuja ümbritsetud jutumärkidega.class Duck: say = “Quack” gender = “Mees” nimi = “Richie”
4
Juurdepääs muutujatele, luues klassi eksemplare.Pythonis kasutatakse klassis määratletud meetoditele ja/või muutujatele juurdepääsuks punktimärki.Näide on toodud allpool.class Duck: say = “Quack” gender = “Meeste” nimi = “Richie”myDuck = Duck() # Loo Duck eksemplar classwhat = myDuck.says# Juurdepääs ütleb Duck klassi muutujale ja# määrab selle muutujale “what” print(what) # Prindib “Quack”
5
Lisage klassi funktsioonid (neid nimetatakse klassi meetoditeks). Siin saab näha klasside funktsionaalsust ja nende võimet väärtusi salvestada.class Duck: say = “Quack” gender = “Male” name = “Richie” def fly(): print(‘Duck lendab’)
6
Kutsuge klassi meetod; antud juhul Duck. Meetodid kasutavad ka punktimärki: nagu tavaline funktsioon, kasutage myDuckclassi meetodi kutsumiseks sulgusid Duck: say = “Quack” gender = “Mees” nimi = “Richie” def fly(): print(‘Pard kärbsed’ )my_Duck = Duck()my_Duck.fly() # Trükib “Pardikärbsed”
7
Klassi class.class atribuutide muutmine Duck: say = “Quack” gender = “Isane” name = “Richie” def fly(): print(‘Pardikärbsed’)my_Duck = Duck()my_Duck.gender = “Naine” # Muudab väärtust muutuja soost failis my_Duck# Nüüd, printimine my_Duck.gender väljastab “Female”
8
Initsialiseerige klass. Klassid käivitavad lähtestamisfunktsiooni iga kord, kui programmeerija loob selle klassi eksemplari. Selle funktsiooni loomiseks lisage paar tühikut klassi esimese ja teise rea vahele ja tippige teisele reale def __init__(self): (veenduge taande tegemiseks).Näites Duck (selgitatakse allpool):class Duck: def __init__(self): self.says = ‘Quack’ self.gender = “Mees” self.name = “Richie” def fly(): print(‘Duck flies’)my_Duck = Duck()# Saate siiski hankida muutujad samamoodi, kuid nüüd# on need mähitud funktsiooniga – hiljem muudavad neid# teised funktsioonid klassis Duck.Isesõna on loodava Duck klassi eksemplar. See sõna võib olla mis iganes programmeerija soovib, kui see on funktsiooni __init__ esimene argument.
9
Lisage funktsioonile __init__ vaikeargumendid. Klass, mis ei võta vastu igasuguseid argumente, on kohmakas. Esmalt tippige see pythoni konsooli klassidefinitsiooni järele:class Duck: def __init__(self): self.says = ‘Quack’ self.gender = “Mees” self.name = “Richie” def fly(): print( ‘Pard lendab’)my_Duck = Duck()my_Duck.says = ‘Ma ei taha vutida’my_Duck.gender = “Naine”my_Duck.name = ‘Lizz’new_Duck = Duck()new_Duck.name = ‘Kutt’ new_Duck.says = “IDK”Sama protsessi tegemiseks on palju parem viis – ühes reas. See nõuab veidi manipuleerimist Duck class:class Duck: def __init__(self, say=’Quack’, gender=’Male’, name=’Richie’): self.says = ütleb self.gender = sooline mina. nimi = nimi def fly(): print(‘Pardikärbsed’)Süveneme sellesse näidesse, alustades argumentidega:says=’Quack’, gender=’Male’, name=’Richie’ – need on vaikeargumendid – kui programmeerija sisestab funktsiooni midagi muud, argument võtab selle asemel selle väärtuse. Kui programmeerija midagi ei sisesta, võtab argument väärtuse, mille on talle määranud operaator =. Lõpuks lisatakse muutujad klassi eksemplarile, mis luuakse, kui programmeerija kutsub klassimeetodit.
10
Looge vaikemuutujatega klassi eksemplare. Selle näite puhul loome uuesti kaks eelmist Ducki – my_Duck ja new_Duck.class Duck: def __init__(self, say=’Quack’, gender=’Male’, name=’Richie’): self.says = ütleb self.gender = sugu self.name = nimi def fly(): print(‘Pard lendab’)my_Duck = Duck(‘Ma ei taha vutida’, ‘Naine’,’Lizz’)new_Duck = Duck(‘ IDK’, name = ‘Dude’)# or new_Duck = Duck(‘IDK’, ‘Male’, ‘Dude’)”’ Eelmine “chunky” codemy_Duck = Duck()my_Duck.says = ‘Ma ei taha to quack’my_Duck.gender = “Naine”my_Duck.name = ‘Lizz’new_Duck = Duck()new_Duck.name = ‘Kutt’new_Duck.says = “IDK””
11
Alustage klassiga. Seda arutati selle artikli 1. osas. Meie näites kirjutame murdosa klass:def GCF(n, m): # Kasutades eukleidilist algoritmi suurima ühisteguri leidmiseks, samas kui n: m, n = n, m % n tagastab mdef reduktsioonimurd(lugeja, nimetaja) : g = GCF(lugeja, nimetaja) lugeja //= g nimetaja //= g tagastab lugeja, nimetajaklass Murd: def __init__(ise, lugeja, nimetaja = 1): ise.murd = reduktsiooni_murd(lugeja, nimetaja)myFrac = Murd (3, 4) # Murd 3/4, ei vähendata print(myFrac) Väljund:<__main__.Fraction objekt 0x7f5d1c0a1c40>
12
Kirjutage üle meetodid __str__ ja __repr__. Need kaks meetodit kontrollivad, kuidas klassi eksemplare printimisfunktsiooni abil kuvatakse. Hea programmeerija soovib, et see murdosa kuvatakse, kui ta trükib (myFrac). Seega tehakse järgmine lisa: def GCF(n, m): # Eukleidilise algoritmi kasutamine suurima ühisteguri leidmiseks, samas kui n: m, n = n, m % n tagastab mdef reduktsioonimurd(lugeja, nimetaja): g = GCF (lugeja, nimetaja) lugeja //= g nimetaja //= g tagastab lugeja, nimetajaklass Murd: def __init__(ise, lugeja, nimetaja = 1): self.fraction = reduktsioonimurd(lugeja, nimetaja) def __str__(ise): return str(ise.murd[0]) + ‘/’ + str(ise.murd[1]) __repr__ = __str__ # Ühe funktsiooni määramine teisele. # See on pythonis seaduslik. Nimetasime äsja # __str__ ümber väärtusega __repr__myFrac = Murd(6, 4) # Murd 6/4, vähendatakse väärtusele 3/2print(myFrac)Output:3/2
13
Funktsionaalsuse lisamine. Funktsioonidena kirjutatavate operaatorite täieliku loendi leiate ametlikust Pythoni dokumentidest. Fraction klassi näite puhul laiendame klassi liitmisfunktsiooniga. Kaks funktsiooni, mis tuleb klasside liitmiseks kirjutada, on funktsioonid __add__ ja __radd__.def GCF(n, m): # Eukleidilise algoritmi kasutamine suurima ühisteguri leidmiseks, samas kui n: m, n = n, m % n return mdef reduktsioonimurd(lugeja, nimetaja): g = GCF(lugeja, nimetaja) lugeja //= g nimetaja //= g return lugeja, nimetajadef lcm(n, m): return n // GCF(n, m) # või m // GCF(n, m)def add_fractions(Frac1, Frac2): denom1 = Frac1[1] denom2 = Frac2[1] Frac1 = Frac1[0] * denom2 Frac2 = Frac2[0] * denom1 tagastab reduktsiooni_murd(Frac1+ Murd2, denom1 * denom2)klass Murd: def __init__(ise, lugeja, nimetaja = 1): ise.murd = redutseeriv_murd(lugeja, nimetaja) def __str__(ise): return str(self.murd[0]) + ‘/ ‘ + str(self.fraction[1]) __repr__ = __str__ # Määrab ühe funktsiooni teisele. # See on pythonis seaduslik. Nimetasime äsja # __str__ ümber parameetriga __repr__ def __add__(self, other_object): if isinstance(other_object, int): # if other_object on täisarv tagasta ise + Murd(muu_objekt) # Tee see murdude klassist # (täisarvud on vaid murrud koos 1 nimetajaks ju!) if isinstance(muu_objekt, Murd): return add_fractions(self.fraction, other_object.fraction) else: raise TypeError(“Ei kuulu klassi ‘int’ ega klassi ‘murd”)myFrac = Murd (6, 4) # Murd 6/4-st, vähendatakse 3/2-ks muu_Frac = Murd(2,3)print(myFrac + other_Frac, ‘n’)print(myFrac + 2)Väljund:13/67/2
14
Jätkake ringi vaatamist. See artikkel on just kriipinud pinda selle kohta, mida klassid saavad teha. Teine suurepärane ressurss mis tahes küsimuste jaoks on Stack OverFlow. Väljakutse jaoks avage Think Functional ja kirjutage klassid.