helenafanfrlikova / python-autumn-2022

0 stars 0 forks source link

Úkol č. 4 - v. 2 #5

Closed helenafanfrlikova closed 1 year ago

helenafanfrlikova commented 1 year ago

https://github.com/helenafanfrlikova/python-autumn-2022/blob/main/ukol-04_v2.py

Ahoj Pavlo,

moc díky za tvoje komentáře, teď už jsem to konečně pochopila. Posílám opravenou verzi, jestli bys to v rychlosti skoukla a jestli ti to takhle už ok, nebo jestli tam ještě někde zůstalo něco špatně – hlavně v označování (self…. / bez self…)

Moc děkuju za postřeh s obrácením toho „vyzkouseno“! Já jsem si totiž myslela, že když ho mám na začátku definované jako False, tak to pak musím psát obráceně. Ale nenapadlo mě si to zkontrolovat v printu, ze kterého to vlastně vyplývalo.

S tím returnem jsem to taky zkoušela posunout, ale tím, že mi to házelo ten objekt, tak jsem si myslela, že to je špatně. Teď vidím, že v kombinaci s tím „repr“ je to vyřešené. Hlavně tím ukončením cyklu po return jsi mi vysvětlila ten rozdíl, takže to je super.

Co se týče toho „self.seznam vyzkousenych“ – to je věc, nad kterou jsem asi nejvíc přemýšlela. V rámci té funkce init to je totiž jinak, že? Tam to musí být, ale u toho „self.seznam vyzkousenych“ už ne. Zkoušela jsem obě varianty a všimla jsem si, že funguje v tomto případě obojí, ale nedokázala jsem rozklíčovat, co z toho je správnější a proč. Přečetla jsem si tvoje vysvětlení („vytvareny seznam neni treba oznacovat self. Python si za self dosadi tu instanci dane tridy (tady tu moje_kucharka), ale zde si nic dosazovat nemusi, aby to fungovalo.“), ale stejně asi úplně nerozumím, proč u init funkce to být musí (jestli to dobře chápu) a tady ne.

Moc díky za všechno, Helena

pmoravkova commented 1 year ago

Mas to dobre. Dobra prace, vazne!! self vlastne nahrazuje argument, za ktery se pak dosadi ten dany objekt. Takze vezmi si kod dole, tak jakmile inicializujes tridu (muffin = Recept('muffin', 2, 'url')), tak se jakoby do kodu dosadi namisto self, ono muffin. Tyhle jednotlive promenne (nazev, narocnost, adresa) jsou globalni v ramci cele tridy, proto potrebujes urceni, koho ty promenne jsou. Jakmile je mas takhle iniciovane, tak si python namisto self vlastne dosazuje ono muffin. Stejne jako u funkci, prvni argument je vlastne na co to chces pouzit, takze funkce zkusit(self), tu si python dosadi zkusit(muffin). Jakmile to nezavisi na tom objektu (muffin), tak tam self nepotrebujes. Takze seznam_vyzkousenych, tam davas jako prvni argument tu kucharku a mas tam recepty te dane kucharky. Takze uz nepotrebujes vytvaret seznam, ktery by byl specificky pro kazdou kucharku zvlast. Neprenasis to mimo funkci, je to zavisle na tom, co das jako argument (jakou kucharku), ale ten vysledny seznam nepotrebuje byt urceny, proto tam self u seznamu vyzkousenych je zbytecne. Obecne OOP (objektove orientovane programovani) je docela slozite, ale doporucuju proste si to vzdy vyzkouset. Klidne si pustit vsechny varianty, po kazde radce si nacpat print, abych vedela, co to dela, apod. Mne to pomohlo nejvic, kdyz jsem se to ucila ja.

class Recept:
    def __init__(self, nazev, narocnost, url_adresa):
        self.nazev = nazev
        self.narocnost = narocnost
        self.url_adresa = url_adresa
        self.vyzkouseno = False
helenafanfrlikova commented 1 year ago

Ahoj,

moc díky za dovysvětlení a za tip, jak to procvičovat.

Měj se!

H.

From: pmoravkova @.> Sent: Sunday, October 23, 2022 2:23 PM To: helenafanfrlikova/python-autumn-2022 @.> Cc: helenafanfrlikova @.>; Author @.> Subject: Re: [helenafanfrlikova/python-autumn-2022] Úkol č. 4 - v. 2 (Issue #5)

self vlastne nahrazuje argument, za ktery se pak dosadi ten dany objekt. Takze vezmi si kod dole, tak jakmile inicializujes tridu (muffin = Recept('muffin', 2, 'url')), tak se jakoby do kodu dosadi namisto self, ono muffin. Tyhle jednotlive promenne (nazev, narocnost, adresa) jsou globalni v ramci cele tridy, proto potrebujes urceni, koho ty promenne jsou. Jakmile je mas takhle iniciovane, tak si python namisto self vlastne dosazuje ono muffin. Stejne jako u funkci, prvni argument je vlastne na co to chces pouzit, takze funkce zkusit(self), tu si python dosadi zkusit(muffin). Jakmile to nezavisi na tom objektu (muffin), tak tam self nepotrebujes. Takze seznam_vyzkousenych, tam davas jako prvni argument tu kucharku a mas tam recepty te dane kucharky. Takze uz nepotrebujes vytvaret seznam, ktery by byl specificky pro kazdou kucharku zvlast. Neprenasis to mimo funkci, je to zavisle na tom, co das jako argument (jakou kucharku), ale ten vysledny seznam nepotrebuje byt urceny, proto tam self u seznamu vyzkousenych je zbytecne. Obecne OOP (objektove orientovane programovani) je docela slozite, ale doporucuju proste si to vzdy vyzkouset. Klidne si pustit vsechny varianty, po kazde radce si nacpat print, abych vedela, co to dela, apod. Mne to pomohlo nejvic, kdyz jsem se to ucila ja.

class Recept: def init(self, nazev, narocnost, url_adresa): self.nazev = nazev self.narocnost = narocnost self.url_adresa = url_adresa self.vyzkouseno = False

— Reply to this email directly, view it on GitHub https://github.com/helenafanfrlikova/python-autumn-2022/issues/5#issuecomment-1288100601 , or unsubscribe https://github.com/notifications/unsubscribe-auth/A3GIVDYKLCUZ2RD7FFZ65S3WEUUYNANCNFSM6AAAAAARMG4GJM . You are receiving this because you authored the thread. https://github.com/notifications/beacon/A3GIVD6MZQJCL57OC7WSMQDWEUUYNA5CNFSM6AAAAAARMG4GJOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTSMY3NPS.gif Message ID: @. @.> >