<div dir="ltr"><div>Chyba bude skôr na mojej strane.<br></div>Už som spomínal, že s OOP len začínam, takže v tých princípoch ešte nie som celkom doma.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/1/13 rajcze <span dir="ltr"><<a href="mailto:rajcze@gmail.com" target="_blank">rajcze@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Asi jsem nepochopil zamer, s jakym je tahle konstrukce vymyslena.... Na co je dobry vytvorit "ukazatel" na metodu jedne konkretni instance pri importu modulu? A kdyz rikas "importovat metody z PrikazovehoRadka" tak tim myslis co? Jakoze, bud mas tridu, tu si importuj, v programu vyrob instanci, a tu pak pouzivej, nebo to holt napis jen jako knihovnu s metodou "proces". Mozna to mas jako pozustatek z Javy, nebo co ja vim, ale v Pythonu neni potreba kazdou kravinu "balit" do objektu, jen aby to bylo kchul objektove.... Me proste prijde, ze zamer s jakym to pouzivas (coz tak jak to mas je s prominutim hloupost), se uplne nekreje s tim, proc programovat objektove.<div>
Ale je mozne, yze jde jen o nepochopeni ejakeho vyssiho principu na me strane.<div><div class="h5"><span></span><br><br>On Sunday, January 13, 2013, Roman Beno wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div><div>Ahoj,<br></div>ten problém s if __name__ ... co si opisoval som vyriešil takto:<br><br>if __name__=="__main__":<br> instancia=PrikazovyRiadok()<br> instancia.proces()<br><br>
elif __name__!="__main__":<br>
instancia=PrikazovyRiadok()<br> proces=instancia.proces<br><br></div>Neviem či je to dobré, ale osvedčilo, ked som chcel importovat metody z PrikazovehoRiadka,<br><br></div>Roman<br><div><br><br></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">Dňa 13. január 2013 10:45, rajcze <span dir="ltr"><<a>rajcze@gmail.com</a>></span> napísal(-a):<br>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Co se dodrzovani PEP8 tyka: Use pyling, Luke! <<a href="http://pypi.python.org/pypi/pylint" target="_blank">http://pypi.python.org/pypi/pylint</a>> <br>Na druhou stranu, je potreba si uvedomit, ze pylint je nacek, a prebrat si co ktera chybova hlaska znamena (samozrejme to jde nastavit tak, aby se urcity typ chyb nehlasil, atd.)<br>
<br>_Vzdy_ prosim pouzivej new-style classes, tj. PrikazovyRiadok(object). Nema to zadne nevyhody, a prinasi to spoustu vyhod (ty sice zatim mozna neocenis, ale jednou se ti budou jiste hodit) <<a href="http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/" target="_blank">http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/</a>><br>
<br>Ad if __name__ == "__main__": z praktickeho hlediska je _temer vzdy_ nespravne mit vykonny kod mimo tenhle blok, a v tomhle pripade to plati obzvlast. Duvod je jednoduchy - predstav si, ze tam ten __main__ blok nemas, a rozhodnes se tenhle soubor importovat jako knihovnu (protoze z nejakeho duvodu chces pouzivat tridu PrikazovyRiadok. Pri importovani modulu pak Python "vykona" celou tu knihovnu, a pak ti zpristupni symboly. Tedy v tomhle pripade (pokud bys nemel volani te metody proces v __main__ bloku) by se ti pri importu spustila metoda proces a zacala poskytovat "prikazovy radek". Coz asi neni to co by clovek pri importu cekal.<br>
<br>Joza<div><div><br><br><div>2013/1/13 Roman Beno <span dir="ltr"><<a>romanbeno273@gmail.com</a>></span><br><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div>Dobrý den,<br></div>tento štýl by mohol vyhovovat?<br><br><div><br></div>#! /usr/bin/python3<div><br># -*- coding: utf-8 -*-<br><br></div>from os import getcwd,system<br>
<br><br><br>class PrikazovyRiadok:<br> """Trieda pracujúca ako príkazový riadok."""<br><br> def proces(self):<br> """"Metóda umožňujúca zadávanie príkazov cez os.system a os.getcwd"""<br>
while True:<br> self.prikaz=str(input("Zadajte príkaz alebo 0 pre ukončenie: "))<br> # Zadaj lubovolný príkaz. Ten sa vo forme výstupu z input()<br> # neskor stane argumentom os.system alebo os.getcwd<br>
if self.prikaz=="0":<br> break<br> # ak však napíšete 0, zoberie si program, že chcete skončit<br> if self.prikaz.startswith("cd"):<br> getcwd(self.prikaz)<br>
continue<br> # mám dojem, že os.system() sa nevztahuje napríkaz cd. Preto dostal<br> # priestor príkaz os.getcwd() v prípade, že sa self.prikaz začina<br> # na cd<br> system(self.prikaz)<br>
# ked sme ešte cyklus nezačali znova, alebo neskončili, spln<br> # konečne ten príkaz<br><br><br>##############################################################################<br>if __name__=="__main__":<br>
instancia=PrikazovyRiadok()<br> instancia.proces()<br><br></div>Nie som si istý, či je dobré dať vytvorenie instancie a volanie metódy do if__name__...<br><br>Ďakujem za odpoveď<br></div><div><br>
<br><div>Dňa 12. január 2013 21:51, Jan Bednařík <span dir="ltr"><<a>jan.bednarik@gmail.com</a>></span> napísal(-a):<div><div><br>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Rád bych ti poradil konkrétněji, ale tím že nedodržuješ PEP8 a nestandardně mícháš různé způsoby zápisu kódu dohromady (CamelCase v zázvech proměnných apod.), je ten tvůj kód na první pohled nepřehledný, alespoň já to tak vnímám. A těžko se to luští.<div>
<br></div><div>Nicméně rozhodně by ses měl vyvarovat importování hvězdiček (from tkinter import *). Měl bys mít přehled o tom co importuješ - měl bys konkrétně importovat jen třídy, funkce, atd., které používáš.</div><div>
<br></div><div>Definování funkcí uvnitř metod je myslím taky na pováženou - měl by si spíše využít pomocné metody. Jak si sám napsal, rozkouskování pro zpřehlednění programu určitě neuškodí - přehlednost a srozumitelnost by měla být na prvním místě, protože až se k tomu kódu budeš někdy vracet, oceníš, když se v něm snadno zorientuješ.<div>
<br></div><div>Ono to rozkouskování na metody a funkce je hlavně otázka citu a zkušeností, které nabereš časem. Případně se zkus přiučit čtením zdrojových kódů nějakých větších open-source projektů.</div><div><div>
<div><br><div>
<br><div>2013/1/12 Roman Beno <span dir="ltr"><<a></a></span></div></div></div></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div></blockquote></div><br></div>
</blockquote></div></div></div><br><div class="HOEnZb"><div class="h5"><br>-- <br>Rules of Optimization:<br>Rule 1: Don't do it.<br>Rule 2 (for experts only): Don't do it yet.<br>
</div></div><br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br></blockquote></div><br></div>