[python] otázka ohladom mojho štýlu písania v OOP
Roman Beno
romanbeno273 na gmail.com
Neděle Leden 13 15:53:07 CET 2013
Chyba bude skôr na mojej strane.
Už som spomínal, že s OOP len začínam, takže v tých princípoch ešte nie som
celkom doma.
2013/1/13 rajcze <rajcze na gmail.com>
> 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 <rajcze na 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 <romanbeno273 na 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.bednarik na 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 na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20130113/1cf7c606/attachment.html>
Další informace o konferenci Python