[python] otázka ohladom mojho štýlu písania v OOP
rajcze
rajcze na gmail.com
Neděle Leden 13 15:28:04 CET 2013
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 <javascript:_e({},
> 'cvml', '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.
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20130113/66be5452/attachment.html>
Další informace o konferenci Python