Anonymní profil Váchyč – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Anonymní profil Váchyč – Programujte.comAnonymní profil Váchyč – Programujte.com

 

Příspěvky odeslané z IP adresy 94.230.156.–

Python › Nefunguje assert spojené s f…
17. 3. 2019   #383302

Prosím pomozte mi, dejte mi radu. (nepřepsal jsem nadpis, žádné assert tam nemám, omlouvám se)

Dám sem rovnou kód, který, otevřen v IDLE, funguje, otevřen v příkazovém řádku však ne.
Bude to tou f-notací, bez ní to jde v pohodě. Kód jsem napsal ve verzi 3.7.2
Tento program nemá rozumný smysl, jen jsem potřeboval vypíchnout ten problém a co nejvíc to zjednodušit. Vždy, když napíšu řetězec v f-notaci, příkazový řádek mi vyhodí SyntaxError: invalid syntax s tím, že zobáček ukáže na poslední úvozovku v druhém řádku.

neco = "abc"
slovicko = f"{neco}"
input(slovicko)
Python › Jak funguje speciální metoda…
12. 7. 2018   #380955

Zdravím vás! Naučil jsem se pracovat se speciálními metodami u tříd, je to super. Představte si, že budete chtít testovat rovnost dvou různých datových typů, v mém kódu jde o porovnání čísel. (další text je pod kódem)

class zt:

    def __init__(self, cislo = "0"):
        self.cislo = cislo

    def __eq__(self, cislo):
        return int(self.cislo) == cislo

zt1 = zt()

Já do té metody __eq__ píšu argumenty nejdřív self, jakožto odkaz na instanci té třídy a druhý argument je >cislo< , což má být číslo typu int . Otázka: Když mám v pořadí vždycky hned self a po něm něco jiného, musím u testování rovnosti také nejdřív používat instanci té třídy (třeba zt1 == 0) nebo si můžu dovolit pořadí operandů prohodit? (0 == zt1)

Mně to funguje i s tím prohozením, ale jasno nemám v tom, jestli na tom pořadí argumentů záleží nebo ne. Víte, co tím myslím? Když napíšu 0 == zt1, zavolá se metoda __eq__ u té nuly, jakožto u instance třídy int nebo __eq__ u instance třídy zt?

Python › Chci se naučit pracovat s de…
2. 7. 2018   #221530

#6 Kit
Jo jo. Tím mi chceš ukázat smysl toho property žejo? Píše mi to "Celkem: 0 Kč" (to jsem ale boháč!)

Chápu, to beru :)

Python › Chci se naučit pracovat s de…
2. 7. 2018   #221528

V tomto komentáři odpovím vám oběma. Děkuji vám za rady, pomohly mi.

Jednak jsem zjistil, proč se mi to cyklilo a taky.... vůbec jsem nepracoval s instancí té třídy, já jsem chtěl pro to přiřazení použít tu třídu jako takovou. To mi psal gna . Dekorátory se mi začínají líbit, představuju si je jako takové chránící zapouzdřovací fce. To se mi líbí. A už mi ten kód funguje, tak dík lidi.

Python › Chci se naučit pracovat s de…
2. 7. 2018   #221527

#2 gna
Ono se mi to právě někdy cyklilo a to jsem taky chtěl vědět, proč. Tak to vím. Díky. Teď už je mi to jasnější :)

Python › Chci se naučit pracovat s de…
1. 7. 2018   #221522

Následuje můj kód třídy zt (jako zkušební třída):
(pod kódem jsou má přání a dotazy)

class zt:

    """
    Trida zt slouzi jen jako obetni beranek pro psi kusy.
    """

    _data = 0

    def __init__(self):
        """
        vstup: neni
        vystup: None
        --
        Metoda __init__ inicializuje tridu zt. Mimo to nedela nic.
        """

        pass

    @property
    def _data(self):
        """
        Metoda data.getter vraci hodnotu promenne >_data< .
        """

        vystup = self._data
        return vystup

    @_data.setter
    def _data(self, nova_data):
        """
        Metoda data.setter uklada retezec >nova_data< do promenne >self._data<
        """
        assert type(nova_data) == int, "data.setter: neplatny vstup"

        self._data = nova_data

Asi jste našli něco, co je tam špatně. Protože to fakt nefunguje. Já se učím pracovat s dekorátory. Zhruba jsem pochopil, že dekorátor je fce, která si jako svůj argument bere jinou fci, kterou nějakým způsobem pozměňuje. Z mého pohledu fce property vrací nějakou proměnnou (tady jsou to _data) .

1. DOTAZ: Nevěřím, že property dělá jenom tohle. Určitě nabízí něco víc. Co vlastně dělá? V čem je tak dobrá?

Dočetl jsem se, že každý atribut má tři vlastnosti:
getter (tuhle vlastnost by měla zastupovat fce property.... je to tak?)
setter
deleter
U dekorátoru @_data.setter vidím už smysl v tom, že do něj můžu přidat nějaké omezení jako je ten můj assert. To už je něco navíc, to už se mi líbí, že vidím něco, čím to původní opravdu měním. No ale taky vidím, že to nefunguje. Zkoušel jsem tohle:

zt._data = "a"

a čekal jsem, že se vyvolá AssertionError, ale nevyvolal se.

2. DOTAZ: V čem dělám chyby?

Učím se z knihy Python 3 - Výukový kurz .... ty dekorátory mě žerou teda. Prosím poraďte mi.

Váchyč
Python › Smysl podtržítka
25. 6. 2018   #221487

#2 Kit
Díky za vysvětlení Kite.

Váchyč
Python › Smysl podtržítka
25. 6. 2018   #221485

Zdravím vás!

Předem se omlouvám za pro někoho určitě hloupou a nelogickou otázku, přesto budu tak drzej a zeptám se:

Učím se objektově programovat a potřebuju všechny ty věci pochopit a hlavně věřit, že mají smysl. Co jsem pochopil u proměnných uvnitř třídy, mohou být viditelné, anebo skryté (tj. s podtržítkem). Vytvořím si třídu....

class trida1:

     _data = 1

     def __init__(self):

          pass

Když zadám:
trida1.data     # vyvolá se výjimka AttributeError

Po zadání:
trida1._data     # dostanu hodnotu proměnné data (tu jedničku)

Moje otázka zní: Když pak každý člověk ví, že jsou proměnné před svou viditelností chráněny podtržítkem, tak tam ten člověk prostě připíše na začátek podtržítko. V čem je teda ta ochrana tak strašně mocná? Kvůli čemu se používá, když je tak jednoduché to obejít?

Cinema 4D › dwg do c4d
15. 12. 2011   #151266

Zdravím, potřebuju radu - dá se nějak importovat dwg výkres do cinemy? Zkoušel jsem hledta, ale bez úspěchu,poraďte. Dík M.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý