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. Ale je mozne, yze jde jen o nepochopeni ejakeho vyssiho principu na me strane.
On Sunday, January 13, 2013, Roman Beno wrote: > Ahoj, > ten problém s if __name__ ... co si opisoval som vyriešil takto: > > if __name__=="__main__": > instancia=PrikazovyRiadok() > instancia.proces() > > elif __name__!="__main__": > instancia=PrikazovyRiadok() > proces=instancia.proces > > Neviem či je to dobré, ale osvedčilo, ked som chcel importovat metody z > PrikazovehoRiadka, > > Roman > > > > > Dňa 13. január 2013 10:45, rajcze <raj...@gmail.com <javascript:_e({}, > 'cvml', 'raj...@gmail.com');>> napísal(-a): > > Co se dodrzovani PEP8 tyka: Use pyling, Luke! < > http://pypi.python.org/pypi/pylint> > 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.) > > _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) < > http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/ > > > > 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. > > Joza > > > 2013/1/13 Roman Beno <romanbeno...@gmail.com> > > Dobrý den, > tento štýl by mohol vyhovovat? > > > #! /usr/bin/python3 > > # -*- coding: utf-8 -*- > > from os import getcwd,system > > > > class PrikazovyRiadok: > """Trieda pracujúca ako príkazový riadok.""" > > def proces(self): > """"Metóda umožňujúca zadávanie príkazov cez os.system a > os.getcwd""" > while True: > self.prikaz=str(input("Zadajte príkaz alebo 0 pre ukončenie: > ")) > # Zadaj lubovolný príkaz. Ten sa vo forme výstupu z input() > # neskor stane argumentom os.system alebo os.getcwd > if self.prikaz=="0": > break > # ak však napíšete 0, zoberie si program, že chcete skončit > if self.prikaz.startswith("cd"): > getcwd(self.prikaz) > continue > # mám dojem, že os.system() sa nevztahuje napríkaz cd. Preto > dostal > # priestor príkaz os.getcwd() v prípade, že sa self.prikaz > začina > # na cd > system(self.prikaz) > # ked sme ešte cyklus nezačali znova, alebo neskončili, spln > # konečne ten príkaz > > > > ############################################################################## > if __name__=="__main__": > instancia=PrikazovyRiadok() > instancia.proces() > > Nie som si istý, či je dobré dať vytvorenie instancie a volanie metódy do > if__name__... > > Ďakujem za odpoveď > > > Dňa 12. január 2013 21:51, Jan Bednařík <jan.bedna...@gmail.com>napísal(-a): > > 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í. > > 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áš. > > 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š. > > 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ů. > > > 2013/1/12 Roman Beno < > > > -- Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet.
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python