DavidErikMollberg/kennsluromur huggingface dataset:
Já best að ég geri nú hérna áður en ég geri einhverjar breytingar ég ætla að segja file save as notum bara set hérna new
Þannig að ég ætla að henda út þessu falli unique elements og make sorted set er ekki bara spurningin um að breyta því falli þannig að það raunverulega noti set gagnaskipanið
Getum við þá ekki bara sagt hérna já ókei við skulum byrja á því að ítra okkur í gegn í gegnum þennan lista hérna
Kalla þetta hérna for element í lista og ég ætla að eiga mér hér result set sem að upphaflega er tómt
Ég kalla sem sagt á set smiðinn og hann gefur mér tóm tómt mengi til til baka
Síðan ætla ég einfaldlega hér í sérhverri ítrun að bæta við þetta result set það er takið eftir að að mengi á sér fall sem heitir add og ég get bætt við þessu elementi í sérhverri ítrun í lykkjunni og mengið sjálft sér um það fyrir mig að að það verði ekki til tvö eintök af sama stakinu þannig að ég þarf ekkert að hafa áhyggjur af því sjálfur
Svona spurningin er núna keyrir þetta eftir þessa breytingu
Þannig að þá erum við búin að refactor a fallið get set
Hvað gerist næst
Það er fallið intersection eigum við að kíkja á það
Já það er spurning hérna með sorted
Jú allt í fína set einn og set tveir eru listar hér vegna þess að sorted skilaði lista hjá okkur og við þurfum nú bara að breyta þessu þannig að við nýtum okkur já nú sé ég að það er eitt vandamál
Sorted skilar nefnilega lista þannig að ég er raunverulega ekki að skila til baka ég er með make sorted set ég er ekki að skila til baka mengi ég er að skila til baka lista
Þannig að þá er þetta nú kannski kannski eðlilegra að kalla þetta þá bara make set þannig að þegar við kölluðum á get set þá erum við raunverulega að skila mengi hérna ekki röðuðu mengi
Og hvað þýðir það
Þannig að hugmyndin er sú að set einn set tveir set þrír og set fjórir séu raunverulega allt mengi
Það er að segja innbyggða ta mengjatagið í í Python en síðan þegar ég prenta það út þá sé ég til þess að ég fái bara raðaða útgáfu
Eigum við ekki bara að sjá hvort að þetta gengur
Svona þetta var fyrra mengið og þetta er seinna mengið
Nei þarna fæ ég type unsupported operand for set
Já gott að þetta kom upp
Þetta gerist oft þegar maður er að reyna að refactor a ég er að reyna að leggja saman tvo upphaflega var ég að reyna að leggja saman tvo lista en nú er ég með tvö mengi þannig að ég get ekki lagt saman svona tvö set vegna þess að þ þau þessi set einn og set tveir eru ekki lengur listar ég geti beitt plús aðgerðunum plús aðgerðin fyrir set raunverulega ekki skilgreind
En hins vegar er önnur aðgerð er það ekki fyrir union sem að er pípan
Þetta á að gefa með union er það ekki
Og skulum prófa það og þá þarf ég náttúrulega að passa mig á því að fyrst að set einn set tveir eru mengi þá fæ ég auðvitað mengi til baka þegar ég er búinn að beita mengja aðgerðinni union þannig að ég kalla þetta þá bara result set hér og þarf ekkert að kalla á fallið make set
Prófum þetta svona og seinna eintakið
Fjórir fimm sjö níu þrettán var intersection og tveir þrír fjórir fimm sjö átta níu ellefu þrettán fimmtán jú sé ekki betur
Takið eftir þetta birtist hérna áfram eins og listi og það er ástæðan er sú að ég kalla á sorted sem skilar lista hérna á menginu þannig að union er ég er búinn að refactor a fallið union þannig að það sé raunverulega að nota mengja aðgerðir það tekur mengi við sjáum það hérna set einn set tveir eru mengi sem koma inn eða gagnatagið set og ég nota mengja aðgerðina union til að búa til sammengið
Það er aðeins eftir hérna er intersection vegna þess að intersection hjá mér hérna er raunverulega að loop ítra í gegnum mengi set einn og fyrir sérhvert stak í set einn þá er athugað hvort það sé í set tvö og svo búa til nýtt mengi
Þetta er í sjálfu sér óþarfi því um leið og ég veit að set einn og set tveir eru mengi þá get ég beitt bara mengja aðgerð
Þannig að ég gæti hreinlega sagt hérna bara skilum bara niðurstöðunni af set einn intersection set tveir
Takið eftir hérna nú er ég að nota mengja aðgerðina and sem er einmitt intersection og þá bara þarf é get ég hent öllum þessum kóða hérna
Og þegar ég skrifa þetta svona þá sé ég að ja hefði ég ekki getað gert það sama hérna í union
Jú væntanlega get ég bara return að beint hérna set einn union set tveir svona
Fyrra mengið og seinna mengið
Það er það sem er átt við með að breyta ekki external bhaviour
Þið sjáið að intersection og union eru náttúrlega föll sem eru mjög einföld
Get set er það í sjálfu sér líka
Þetta býr til set hérna mey kallar á make set úr lista það sem sagt hefur þetta hlutverk að taka lista inn og búa til mengi út úr því
Það er hér í og svo er ítrað í sérhvert stak í gegnum ítrað segi ég í gegnum listann og sérhverju staki bætt við
Sko þetta er nú væntanlega hægt að gera aðeins á einfaldari máta
Það er einhverskonar hlutur sem hægt er að ítra yfir og list er einmitt einhver hlutur sem hægt er að lít ítra yfir er það ekki
Þannig að ef ég sendi listann bara inn í set smiðinn þá mun set smiðurinn búa til mengi út úr þessum lista
Og það sem hann gerir er náttúrulega væntanlega að ítra yfir sérhver stök sjálfur þannig að ég þarf ekki að gera það ja vonandi ekki
Prófa þetta einu sinni enn
Úps og það er hér
Já þetta virkar líka
Og þá get ég enn og aftur einfaldað hlutina ég hendi auðvitað þessi kommenti og ég get náttúrlega bara skilað þessu beint
Þarf enga milli breytu hérna
Sjáið þið hvað hefur raunverulega gerst hérna
UNK ef ég keyri
já ég bara horfi á þetta og sé þetta ekki það er bara samasem merki hérna svona
Þrjátíu og átta línur breyttum því í forrit sem að er tuttugu og þrjár línur
Og og náðum sem sagt að stytta útfærsluna mjög mikið og útfærslan í föllunum er orðin rosalega einföld vegna þess að við erum að nota innbyggt gagnatag í stað þess að vera að útfæra sjálf einhverja mengja virkni með listum
Já komið þið sæl við skulum halda áfram umfjöllun okkar um klasa og ég að búa til hérna klasa sem heitir vector og tengja hann aðeins við þá umfjöllun sem er í köflum ellefu og tólf í kennslubókinni einmitt um klasa
Þessi klasi hann á að hjúpa sem samt ákveðna virkni í stærðfræðilegum vector þannig að ég gæti til dæmis spurt vectorinn hvers hver lengd þann sé hvernig ég get ég geti síðan skalað vectorinn með ákveðinni tölu
Ég gæti lagt tvo vector a saman Þetta eru svona helstu atriðin til að biðja mig alla vega
Sem ég ætla að útfæra og þið kannski geti síðan haldið áfram útfærsluna sjálf til að bæta við einhverja ákveðna virkni
Þannig mikilvægt er eins og við höfum talað um áðum áður að hjúpa ákveðna virkni inni í klasa og hjúpunin felst í því þar verða gögn í vectornum og það verða einhverjar aðgerðir sem við getum gert á einstökum tilvikum vector sins og
við gætum kannski byrjað á að gera er að skoða hvað hvernig mundi ég nota svona vector og ef við segjum hérna að aðalforritið byrjar hérna þá myndi ég til dæmis vilja geta gert eitthvað svona að ég eigi mér breytu sem heitir vectora einn vec einn
Og ég kalli á smið sem heitir vector og ég sendi inn í vectorinn stökin inn í á smiðinn stökin sem ég vil hafa í þessum tiltekna vector og segjum sem svo að ég vilji hafa hér tvo komma fjóra og ætla að senda takið eftir því senda það hér inn sem lista
Þannig ég ætla að búa til hérna í þessu tilviki tvívíðan vectors sem inniheldur stökin tveir og fjórir Þetta er svona fyrsta sem ég vil geta gert
Nú hvernig út var ég þá svona vektor
Og í langflestum tilvikum þarf ég einhvers konar init fall er það ekki sem sér um að upphaf stilla vector tilvikið mitt þannig að ég er með fall sem heitir init og þar með þessum sérstaka þætti ef ég er með tvö undirstrik sitthvoru megin við init
Og fyrsta viðfangið hér en fyrsti parameterinn self og í þessu tilviki ætla ég að hafa annað viðfangið er listi sem kemur inn og ætla að kalla bara hérna a list
Og þá vil ég halda utan um þennan lista sem kemur inn þannig að vektorinn geti geymt þennan lista
Og þá er eðlilegt að vectorinn sjálfur eigi sér einhverjar breyti við skulum kalla hana hérna bara elements ég ætla að kalla hann elements Þá verður þessi listi hér sem kemur inn
Nú þá kemur þarna kannski fyrsta spurningin hvað í ósköpunum er ég að gera hér með því að setja tvö undirstrik fyrir framan breytu nafnið
Og þetta er þessi venja í Python að ef maðurinn sem heitir private tilvika breyta þá er hún með tveimur undirstrikum fyrir framan
Þýðir það að hún verði ekki aðgengileg utan klasans
Og jafnvel prófa að prenta það út hérna
Eigum við að prófa þetta á hvort þið getið þetta
Ég fæ attribute error vector error has no attribute elements
Það er að segja utan frá kemst ég ekki í tiltekin gögn í vectornum og þetta er mjög algeng leið að þegar maður er að hjúpa ákveðna virkni hjúpa gögn og virkni klasa þá getur maður gert tilvika breytur klasans óaðgengilegar með því að gera þær private Þetta þýðir að hún er private
Þar sem raunverulega gerist er það að að Python hérna breytir nafninu á þessu þessari tilvika breytu á ensku er sagt mangles the name það er að segja ruglar nafninu á einhvern hátt þannig að utan frá komist ég ekki í það á þennan máta
Við sjáum kannski muninn ef ég hefði ekki gert þetta private og haft þetta bara það sem heitir public breyta svona
Og keyri þetta núna sjáið það gengur
Nú fæ ég hér einmitt hérna tveir komma fjórar til baka
Það þýðir það að af því þetta er public þá kemst aðalforritið í breytuna með því að vísa í hana eða ég kemst í hana í gegnum tilvikið vec einn punktur elements
En ef ég vil koma í veg fyrir það þá geri ég hana sem sagt private á þennan máta
Og þetta tengist því sem við höfum oft talað um þessi upplýsingahuld sá sem er að nota tiltekinn klasa eða tiltekið fall
Hann þarf ekki að vita hvernig það er útfært og við erum að einhverju leyti
Hann eigi ekki að þurfa að gera vegna þess að það sem hann á að nota er eru skil klasans muni þau skil eða interface klasans eru þær aðgerðir sem klasinn býður upp á
Þannig að þá eigum við init fall og sem kallað er á er það ekki þegar nýtt tilvik er smíðað þegar við köllum hann þennan smið þá verður kallað á init
Og það tekur hérna selfsem fyrsta viðfang og s t r á alltaf að skila streng þannig að það sem ég vil gera hér er að segja ja skilum bara self elements sem er þá listi en breytum ofan í streng áður en við skilum ritun s t r af self elements sem því er hér að ég á að geta prentað út þetta tilvik vec einn vegna þess það verður þá kallað á s t r fallið ef að það er á annað borð útfært
Nú finnst þannig að ég kominn með hérna skilar það ekki sem er init og s t r
Það sem ég vil geta gert meira hérna er að ég vil geta skalað svona vector
Þannig ég ætla að bjóða upp á fall sem heitir scale eða scale ing kalla ég það
Ja það þarf að fara í gegnum sérhvert stak í vector num
Sem sagt vísa ég i ta stakið verður self já þarna gleymdi ég að það þurfa að vera tvö undirstrik
Elements af i sinnum einhver tala og þá þarf ég að fá töluna inn eigum við ekki að kalla það bara hérna
skalar
Þannig þetta er skilgreiningin á scale ing falli
það ítrar í gegnum sérhvert stak í
þannig ef að við segjum hér
vec einn punktur
scaling með tölunni hvað eigi að segja þremur og prentum síðan út vec einn
sex og tólf er það ekki Tveir er margfaldað með þremur og fjórir er margfaldað með tólf
en það sem við þurfum ekki að skrifa þegar ég kalla í sjálfur kallinu vegna þess að það er sjálfgefið að self er alltaf tilvikið sjálft Það er að segja einn Vec einn er self
þrír er skalar í þessu tilviki
Sko hérna nota ég length len fallið til að finna hverjir lengdin á self elements kannski gott fyrir mig að eiga bara en fall sem hluta af skilunum sjálfum og þetta er einmitt eitt af þeim föllum sem er hægt að fjölbinda eins og það heitir eða to overload heitir það á ensku to overload a function
Og ég get sem sagt fjölbundið fall sem heitir len sem sagt undirstrik undirstrik len undirstrik undirstrik það tekur að sjálfsögðu self sem fyrsta viðfang og tilgangur þessa len falls er þá alltaf í þegar við erum að útfæra það í klasa að skila lengdinni á viðkomandi tilvik tilviki og við í sjálfu sér ráðum því hvað hvað lengdin þýðir í tilteknar klasanum í þessu tiltekna klasa í mínu tilviki hér fyrir vektor
Þá ætla ég einfaldlega skila bara leyndinni af self elements
Það væri eðlilegt er það ekki leyndinni af vector num
Þetta er mjög einfalt fall sem við fjölbindum við erum að fjölbinda þetta lengd fall og það skilar not nýti sér einfaldlega innbyggða len fallið sjáið þið þetta len fall hér er ekki tengt við neinu sérstöku tilviki
Ég er ekki að kalla á þetta með því að nota dot notation þannig að þetta er bara stand alone fall innbyggt falli Python og ég nýti mér það í útfærsluna á þessu len falli hér
Og þá get ég bara í stað þess að kalla á len hér sem í sjálfu sér allt í lagi
En ég gæti þá sagt í staðinn self punktur ja eða bara einfaldlega len það er eiginlega betra len af self sjáið þið
Ég kalla á len sem er innbyggt fall í Python með self og það sem gerist þá er að Python túlkunin sér að self er tilvik af vector og þá athugar túlkurinn er til fjölbinding á len fallinu í klasanum
Og svarið er já í þessu tilviki
Ég er búinn að útfæra þetta len fall í klasanum vector sem þýðir að það verður kallað á það þegar ég kalla þetta innbyggða len fall í Python
Sem sagt að kalla á len hér fyrir self þýðir að það verður kallað á þetta fall hérna í vector num
Eigum við að sjá hvort þetta virkar
Hvað hvað gerist ef að ég hefði ekki útfært þetta len fall eða undirstrik undirstrik len í vektor
Hvað hefði þá gerst
Sem gefur mér sérstaklega til kynna að ég hafi ekki útfært lengdar fallið fyrir vector og þar með get ég ekki kallað á þetta len fall hér
Það er mikilvægt að átta sig á þessu
Þannig höfum það svona
Svona var þetta
Nú fyrst að ég er búinn að útfæra eða fjölbinda eins og to overload þetta len fall hérna þá get ég auðvitað notað líka utan klasans
Ég get sagt hérna hver er vec hver er lengdin á vec einum
Hún er tveir er það ekki það eru tvö stök hérna
Og við erum raunverulega búin að hjúpa núna ákveðna virkni bæði gögn og aðgerðir inni í klasa sem heitir vector takið eftir að gögnin eru raunverulega bara þessi stök sem kom inn með höldum utan um þau
Notandinn hann þarf í sjálfu sér ekkert að vita hvernig er haldið nákvæmlega utan að þau sögðu að notandi hann sendi henni lista hérna sem segir ókei upphafsstillum vector inn með þessum lista
En hann hefur í sjálfu sér ekki hugmynd um og þarf ekki að vita hvernig haldið er utan um gögnin inni í vector num sjálfum
Það vill svo til í þessari útfærslu en það er haldið utan um gögnin sem bara lista sem sagt self undirstrik undirstrik elements er listi en það er eitthvað sem að sá sem notar klasann hann þarf ekkert að vita af því
Og það er ekkert hér í sjálfu sér sem bendir endilega til þess að það sé listi nema kannski það að þegar við prentum þetta út þá sjáum við þetta svona
En við hefðum auðvitað getað prentað út á einhvern annan máta
Þannig alla vega hugmyndin er sú að sá sem að notar vector klasann hann þarf ekki að vita hvernig gögnin eru geymd innan hans
Sem köllum hann vec tvo og hann er vector það sem að ég er með segjum hann er er þrír víddur þrívíður og þá geti prentað hann hérna og ég get prentað er það ekki prófum það lengdina af vector tveimur líka
Sjáið þið klasinn okkar hann er nægilega sveigjanlegur til þess að við getum sent inn raunverulega bara hvaða vídd sem er hérna
En það var eitt fall í viðbót sem ég nefndi í upphafi sem væri gott að hafa og það er að geta reiknað út lengdina eða fengið til baka lengdin á vector þannig eigum við ekki bara að kalla hérna og þá er ég að tala um sko ekki fjölda staka heldur lengdina í í rýminu og í tvívíðum eða þrívíðu rúmi
Og hvernig er það
Í fyrsta lagi náttúrlega self sem kemur hérna inn en lengd á vektor stærðfræðileg lengd á vektor er þannig að við setjum sérhvert stak í annað veldi leggjum leggjum niðurstöðurnar saman og tökum svo kvaðratrót af niðurstöðunni
Það er skilgreiningin á lengd á vector í svona tvívíðu eða þrívíðu rúmi eða n víðu rúmi getum við sagt
Hvernig myndi ég þá gera það
Ja ég gæti sagt hérna að ég þarf að hlaupa frá núlli
Núll er sjálfgefið
For i in range lengdina af self og í sérhverri ítrun hérna
Þá ætla ég að leggja þá ætla ég að setja stak í annað veldi og halda utan um það í einhverjum summu kalla hérna square sum
Þannig ég er að summunni á þar sem sérhver stak er sett í annað veldi
Þá verð ég að passa mig að gera ekki þessa klassísku villu að upphafstilla ekki summuna
Þannig hún er náttúrulega núll í upphafi og þegar ég er búinn að ítra mig í gegnum þetta hérna þá þarf ég að taka kvaðratrótina af summunni í lokin og í stað þess að fara að skrifa eitthvað kvaðratróta fall þá nýti ég mér það náttúrulega að það er til fall í math sem við höfum notað áður sem heitir square root og það tekur þá summuna hérna
Og það sem ég ætla að skila
En ef ég er að nota mér hérna math þá þarf ég að import a það þannig að ég gæti import að hérna math hérna uppi
Prófum bara að keyra hægt að sjá hvort að þetta keyrir alla vega það keyrir
Það koma engar syntax villa á þetta og ég er náttúrulega ekki búinn að prófa þetta square root fall en við gætum prófað það hér að hver er til dæmis lengdin á vec einum
Já hérna vantaði mig svigi lokast
Þrettán komma fjórar einn sex þannig að við fáum sko hvað er við að gera hérna tveir í öðru veldi eru fjórir fjórir í öðru veldi eru sextán
Þetta eru þá tuttugu er summan og hvaðratrótan tuttugu
Eigum við ekki kannski að breyta þessu þannig við notum tölur sem við þekkjum vel
Sko þrír í öðru veldi er níu fjórir í öðru veldi er sextán níu plús sextán eru tuttugu og fimm og hvaðratrótin af því ætti að vera fimm er það ekki keyri þetta
Þá fæ ég hvað
Fimmtán sem er nú ekki rétt
Hvað er hérna að
Já bíddu ég var búinn að skala hérna vector inn er það ekki áður
Þannig ég skala það með þremur ef við bara tökum það aðeins út hérna keyri þetta aftur
Þá fæ ég fimm einmitt já
Ef við síðan prófum þetta hérna fyrir vector fyrir hinn vector inn svona
Hver er lengdin á þessum vector sem er þrívíður það er þrír komma sjötíu og fjórir
Já þannig að það sem við erum raunverulega ef við förum hérna í lokin bara rétt yfir það sem við vorum að gera
Við bjuggum til klasann vector þar sem honum að hjúpa ákveðnar aðgerðir og gögn og aðgerðir við bjuggum til ákveðin skil skilin lýsa sér í þeim aðgerðum sem boðið er upp á init s t r len scale ing og length
Og við no nýttum okkur hérna prívat breytur
Elements er prívat breyta sem veldur því að hún er ekki aðgengileg utan frá og við nýttum okkur líka það sem heitir fjölbinding sem að er það að búa nota einhverja aðgerð sem er fyrir fram skilding skilgreint eins og len og útfæra
gera gera hana raunverulega aðgengilega í klasanum okkar vector með því að nota underscore underscore len þannig að þetta er það sem heitir overloading við overload um eða við fjölbindum aðgerðina len
Og eitt sem hér ætti að vera í lokin sem ég held að þið ættuð bara að gera það að þið ættuð að útfæra aðgerðina add sem sagt fjölbinda þessa aðgerð þannig ég gæti lagt tvo vector a saman
Þannig hérna kæmi self og svo væri einhver vector other sem kemur hér og tilgangur þessa falls væri það að skila return a new vector wich is the resault of adding self and other
Þetta ættuð þið að útfæra og það þýðir það að í lokin hér ætti að geta sagt vec þrír er samasem vec einn plús vec tveir
Þannig að plúsinn hérna er þá aðgerð sem hægt er að fjölbinda eða overload a
Og hvernig gerum við það
Jú með því að útfæra fallið add
Og það sem raunverulega gerist það að þetta þýðir að það sem við erum að gera er eftirfarandi svona sjáið þið vec þrír er samansafn vec einn plús vec tveir er sambærilegt við það að segja vec einn köllum á add með vec tveir sem parameter af hverju það
Það er vegna þess að self munið þið map past í tilvikið sjálft og parametr inn map past í other
Og þá þarf að skila í þessu falli sem sagt nýjum vector sem er niðurstaðan af því að leggja saman einstök stök í self og other
Það er að segja object oriented programming Og
við höfum það það er talað um að það séu þrír svona aðal eiginleikar hlutbundinnar forritunar þær koma fram hérna á á skjánum Það er að segja hjúpun erfðir og fjölbinding
Og ensku heitin eru hérna encapsulation inheritence og polymorphism
að við hjúpum ákveðin gögn
og aðgerðir inn í klasa
og beitum þar með einhvers konar upplýsingahuld í leiðinni Það er að segja sá sem að notar klasann eða eða tilteknar aðgerðir í klasanum hann þarf ekki að vita hvernig aðgerðirnar eru útfærðar heldur þarf hann bara að vita hvaða skil klasinn býður upp á Það sem á ensku kallast interface Munið að skilin eru raunverulega bara þau
býður manni upp á að nota
Þannig að þetta er það sem kallast hjúpun Annað sem við höfum talað um er það sem á íslensku heitir fjölbinding eða polymorphism á ensku
Og dæmi um það eru til dæmis þegar við erum að beita því sem á ensku kallast operator overloading Það er að segja að fjölbinda eða stundum sagt yfirskrifa to overload
aðgerðir eins og til dæmis plús Við höfum séð það að plús í Python hann hagar sér
mismunandi eftir því hverjir þolendur hans eru Til dæmis ef ég geri þrír plús fjórir þá er ljóst að þolendurnir fyrir þennan plús
eða operands sem það sem það heitir á ensku eru þrír og fjórir eða eru integer tölur og þá er verið að beita hérna integer samlagningu
Ég get líka gert hérna
s t r einn Það er að segja beita þessu hérna á strengi s t r einn plús s t r tveir Og þá hagar plúsinn sér öðruvísi það er vegna þess að þolendur hans eru tilvik af string
Og í þessu tilviki er er hagar sér plúsinn þannig að hann hann bætir einum streng við annan
Þannig að þetta er það sem að þetta er dæmi um það sem heitir fjölbinding
að tiltekin aðgerð
hagi sér á mismunandi hátt eftir því í hvaða samhengi hún birtist Og við höfum séð það líka þegar við erum að búa til klasa í Python að við getum sjálf
skrifað eða fjölbundið aðgerðina plús sem er sem sagt add það er raunverulega þessi hérna aðgerð
Það er add method sem að við yfirskrifum eða fjölbindum og getum þar með útfært hana á einhvern tiltekinn máta fyrir okkar eigin klasa
Þannig að það er það sem að kallast fjölbinding en þessi síðasti hlutur hérna erfðir eru raunverulega eitthvað sem við höfum nánast ekkert talað um hingað til
Það sem á ensku heitir inheritence og
ég ætla sem sagt að fara stuttlega aðeins yfir erfðirnar hérna í þessu myndbandi
Nú hvað hver eru grundvallaratriðin með erfðum Hver er tilgangur þeirra Það má segja það að erfðir gera okkur kleift að erfa
gögn
þá gæti ég nýtt mér að tiltekinn einhver annar klasi er þegar til fyrir sem er líkur mínum klasa og ég get erft ákveðna eiginleika úr þeim klasa sem er til fyrir
og við höfum séð það að
í Python þá getur maður skilgreint innan sviga þegar maður er að skilgreina svona klasa frá hverjum hann erfir Og sjálfgefið er að hann erfi frá klasa sem heitir Object
Það eru sem sagt allir klasar í Python erfa frá Object þannig að ég þarf ekki að skrifa það Ég get sleppt því að skrifa hérna Object en að því að ég er nú að tala um erfðir þá ætla ég að hafa það hérna með
í Init að taka við tveimur
parameterum Köllum það hérna first og last sem standa fyrir first name og last name þannig að þessi
sem að við upphafsstillum með last svona
einfaldur
Person klasi
Þannig að ef ég ef hann lítur svona út og ég vill búa til tilvik af þessu þessu Person object i þá get ég sagt p einn samasem Person
og sendi hérna inn
Bobby fyrsta nafn
Þannig að við getum sagt það hérna að main program starts here
Og eins og við höfum verið að leggja áherslu á þegar menn eru að búa til eitthvað þá er alltaf gott að prófa að keyra eftir að maður er búinn að skrifa lítinn kóða til að sjá hvort viðkomandi forrit keyrir og það keyrir vissulega ég fæ ekki um neina keyrsluvillu En auðvitað sé ég ekkert út af vegna þess að ég bara bjó til tilvik af Person og gerði ekkert meira hér
Nú annað fall sem að við tölum oft um að sé nauðsynlegt það er að
fjölbinda s t r fallið
Þannig að nú
útfærum við s t r takið eftir þetta er einmitt þetta dæmi um um um fjölbindingu eða polymorphism a
það verði kallað á það þegar ég er með tilvik af Person í höndunum og vill prenta það út
Þannig að það kemur self hér inn
og eigum við ekki bara að segja munið það að þetta þarf að skila streng við skulum segja skila bara hérna
höfum hérna placeholder
svona bara við getum þá formatað hann með self
já þarna gleymi ég að loka gæsalöppum
self first name
Takið þið eftir því að ég er sem sagt að nota underscore underscore hérna
að því að ég vil að þessar breytur séu private
bara komið hérna og þá get ég sagt hérna prent p one print p one
Aftur prófa ég
og ég fæ Bobby Jones fínt