Ahoj,<div><br></div><div>v prvé řadě bych doporučil nastudovat si PEP-8, což je doporučení (de-facto standard) jak psát kód v Pythonu. <a href="http://www.python.org/dev/peps/pep-0008/">http://www.python.org/dev/peps/pep-0008/</a></div>

<div><br></div><div>Honza</div><div><br></div><div><br><br><div class="gmail_quote">2013/1/12 Roman Beno <span dir="ltr"><<a href="mailto:romanbeno273@gmail.com" target="_blank">romanbeno273@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><a href="http://programujte.com/anonymni-profil/170094/" title="Zobrazit příspěvky ze stejné IP adresy" target="_blank"><span></span></a>
                                                        <div>
                                                                
                                                                
                                                                
                                                        </div>
                                                                <div>
                                                                        <div>
                                                                                <div>
                                                                                        
                                                                                        <span><p>
        Dobrý deň,</p>
<p>
        chcel by som sa spýtať na váš názor ohľadne môjho štýlu písania programov v OOP.<br>
        Rád prijmem akukolvek kritiku, mojim cielom je sa v tomto ohľade zlepšit a v tejto oblasti som si nie som príliš istý.</p>
<p>
        Tu sú ukážky mojich kódov:</p>
<p>
        # -*- coding: utf-8 -*-<br>
        #################Definícia triedy#######################<br>
        class Fibonacci:<br>
            "Fibonacciho trieda"<br>
            def __init__(self,a=0,b=1,pocet_cisiel=10,default=0):<br>
                "Vyrobíme stavebný materiál pre fibonaccciho postupnosť."<br>
                self.a=a<br>
                self.b=b<br>
                self.pocet_cisiel=pocet_cisiel<br>
                self.default=default<br>
            def proces(self):<br>
                print(self.a,self.b,end=" ")<br>
                while True:<br>
                    self.a=(self.a+self.b)<br>
                    self.default+=1<br>
                    if self.default>=self.pocet_cisiel:<br>
                        print("\n")<br>
                        break<br>
                    print(self.a,end=" ")<br>
                    # postupnost bude a,b,a,b,a,b... tento blok je pre všetky a<br>
                    self.b=(self.a+self.b)<br>
                    self.default+=1<br>
                    if self.default>=self.pocet_cisiel:<br>
                        print("\n")<br>
                        break<br>
                    print(self.b,end=" ")  <br>
                    # a tento pre všetky b<br>
        #################Hlavný program##########################<br>
        MojaInstancia=Fibonacci(pocet_cisiel=20)<br>
        MojaInstancia.proces()</p>
<p>
        ************************************************************************************************************<br>
        Tu je další:</p>
<p>
        # -*- coding: utf-8 -*-<br>
        # program Záznamník adries<br>
        # tréning Tkinter + OOP<br>
        # autor JA, dnes<br>
        # ver. 1.0<br>
        # * opravená chyba pri vytvárani poľa pre zadávaní adresy, použitá neexistujúca farba okna<br>
        # * opravená chyba pri vytváraní tlačítka ukončujúceho okno zadávania, použitý neexistujúci názov prvku<br>
        # * zmenené umiestnenie a veľkosť tlačítka pre zavretie okna pri pridávaní adries<br>
        # ver. 1.1<br>
        # * opravená chyba pri potvrdení voľby mena pri pridávaní mena, použitá neexistujúca premenná<br>
        # * opravená chyba pri potvrdení voľby mena pri pridávaní adresy, použitá neexistujúca premenná<br>
        # ver. 1.2<br>
        # * polia pre zadávaní mena aj adresy sa po zadaní oboch údajov teraz vymažú (ich hodnota)m<br>
        #   uživatel ich teraz nemusí zadávať sám<br>
        # * opravená chyba pri  načítaní údajov zo zoznamu, použitá neexistujúca premenná<br>
        # ver. 1.2.1<br>
        # * opravená chyba pri zobrazovaní načítaných údajov,použitá neexistujúca premenná<br>
        # ver. 1.3<br>
        # * opravená chyba pri vytváraní tlačítka na zavretie okna načítania údajov, použitá neexistujúca<br>
        #   premenná<br>
        # * opravená chyba pri zobrazovaní načítaných údajov (druhá chyba v tomto), použitá neexistujúca premenná<br>
        # * zmenený text niektorých tlačítok v úvodnom menu<br>
        # * v popisku okna sa teraz zobrazuje aj aktuálna verzia programu<br>
        # ver. 1.3.1<br>
        # * pri načítaní údajov upravená oddelovacia čiara údajov<br>
        # * zmenené rozmery tlačítka ukončujúceho okno načítania údajov<br>
        # ver. 1.3.2<br>
        # * v okne ukladania súboru zmenená farba informačného textu na prehľadnejšiu<br>
        # * opravená chyba pri ukladaní súborov, použitá neexistujúca premenná<br>
        # ver. 1.4<br>
        # * opravená chyba pri ukladaní súborov, použitá ďalšia neexistujúca premenná<br>
        # * zmenená farba riadku pre chybové hlásenia v okne ukladania dát na prirodzenú bledomodrú<br>
        # * pridaná možnosť odstránenia položiek zo zoznamu</p>
<br>
<p>
        from tkinter import *<br>
        import sys<br>
        import os</p>
<p>
        class Zaznamnik:<br>
            "Toto je trieda môjho záznamníku"<br>
          <br>
            def __init__(self):<br>
                self.hlavneOkno=Tk()<br>
                self.hlavneOkno.title("Záznamník, Ver. 1.4")<br>
                self.adresy=[]<br>
                self.zoznamMena=[]<br>
              <br>
            def program(self):<br>
                "Táto časť programu bude mať za úlohu čisto len grafiku hlavného menu (nie logiku)."<br>
                
self.HOuvodnypopisokLabel=Label(self.hlavneOkno,bg="lightblue",text="Vitajte
 v mojom záznamníku adries.\nDúfam, že sa vám bude páčiť.")<br>
                self.HOuvodnypopisokLabel.grid(row=0,column=0,sticky=W+E+N+S)<br>
                # uvodny popisok - label - ktorý nás privíta v programe<br>
                
self.HOtlacitkoZadavatAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Pridať
 adresy do záznamníka")<br>
                self.HOtlacitkoZadavatAdresy.grid(row=1,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo umožniť zadávanie adries<br>
                
self.HOtlacitkoOdstranitAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Odstrániť
 adresu zo záznamníka")<br>
                self.HOtlacitkoOdstranitAdresy.grid(row=2,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo umožniť odstránenie adries<br>
                self.HOtlacitkoUlozit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Uložiť do súboru")<br>
                self.HOtlacitkoUlozit.grid(row=3,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo umožnit uloženie do súboru<br>
                
self.HOtlacitkoNacitat=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Načítať
 dáta zo zoznamu")<br>
                self.HOtlacitkoNacitat.grid(row=4,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo umožniť načítanie dát zo súboru<br>
                self.HOtlacitkoNapoveda=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Zobrazenie nápovedy")<br>
                self.HOtlacitkoNapoveda.grid(row=5,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo zobraziť nápovedu<br>
                
self.HOtlacitkoUkoncit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Ukončiť
 program",command=self.hlavneOkno.quit)<br>
                self.HOtlacitkoUkoncit.grid(row=6,column=0,sticky=W+E+N+S)<br>
                # tlačítko, ktoré by malo ukončiť program<br>
              <br>
                def zadavanie_adries():<br>
                    "Táto časť bude zachytávať logiku programu. Kvoli velkému 
rozsahu rozdelenú na niekoľko častí. Konkrétne zadávanie adries."<br>
                    # prvá časť tejto funkcie<br>
                    # vzhľad podokna na zadávanie<br>
                    self.OknoZadavanie=Toplevel()<br>
                    self.OknoZadavanie.title("Zadávanie adries")<br>
                    
self.OknoZadavanieLabel=Label(self.OknoZadavanie,bg="lightblue",text="            
 Aktuálna činnosť: Zadávanie adries                 \nPre potvrdenie 
údaju z okna stlačte ENTER.\n")<br>
                    self.OknoZadavanieLabel.grid(row=0,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    # Vytvorenie podokna na zadávanie adries, nastavený titulok + úvodný Label<br>
                    self.VarPPCH=StringVar()<br>
                    self.OknoZadavanieLabelChybHlasky=Label(self.OknoZadavanie,bg="lightblue",textvariable=self.VarPPCH)<br>
                    self.OknoZadavanieLabelChybHlasky.grid(row=1,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    # Vytvorená textová premenná pre prípadné chybové hlášky. Pre začiatok sa bude tváriť ako<br>
                    # neviditeľná súčasť okna<br>
                    self.RamecZadajMeno=Frame(self.OknoZadavanie,bd=3,bg="lightblue")<br>
                    self.RamecZadajMeno.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    self.VarPZM=StringVar()<br>
                    # Vytvorený rámec pre zadanie mena + popisok k nemu. Taktiež premenná pre políčko<br>
                    # pre vstup<br>
                    self.RamecPopisokPola=Label(self.RamecZadajMeno,text="Zadajte meno dotyčného:",bg="lightblue")<br>
                    self.RamecPopisokPola.grid(row=2,column=0,sticky=W+E+N+S)<br>
                    self.PolePreVstupMena=Entry(self.RamecZadajMeno,bg="lightyellow",textvariable=self.VarPZM,font="Arial 8")<br>
                    self.PolePreVstupMena.grid(row=2,column=1,columnspan=3,sticky=W+E+N+S)<br>
                    # Vytvorený popisok pre pole pre vstup + políčko samotné<br>
                    self.RamecZadajAdresu=Frame(self.OknoZadavanie,bd=4,bg="lightblue")<br>
                    self.RamecZadajAdresu.grid(row=3,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    self.LabelPreDruhePole=Label(self.RamecZadajAdresu,bg="lightblue",text="Zadajte adresu dotyčného: ")<br>
                    self.LabelPreDruhePole.grid(row=3,column=0,sticky=W+E+N+S)<br>
                    self.VarPPA=StringVar()<br>
                    self.PolePreAdresu=Entry(self.RamecZadajAdresu,bg="lightyellow",textvariable=self.VarPPA,font="Arial 8")<br>
                    self.PolePreAdresu.grid(row=3,column=1,columnspan=3)<br>
                    # Vytvorený rámec pre zadanie adresy, popis pre neho, premennú pre neho a taktiež pole<br>
                    # samé.<br>
                    
self.ZadavacieTlacitkoUkoncit=Button(self.OknoZadavanie,bg="lightblue",activebackground="lightgreen",command=self.OknoZadavanie.destroy,text="Zavrieť
 toto okno")<br>
                    self.ZadavacieTlacitkoUkoncit.grid(row=4,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    self.OverovaciToken=0<br>
                    # Vytvorené tlačítko pre zavretie tohto okna pre zadanie adresy.<br>
                    def enter(BoloStlacene):<br>
                        BoloStlacene.widget.configure(state=DISABLED)<br>
                        self.udajMeno=str(self.PolePreVstupMena.get())<br>
                        self.OverovaciToken+=1<br>
                        if self.OverovaciToken==2:<br>
                            self.PolePreVstupMena.configure(state=NORMAL)<br>
                            self.PolePreAdresu.configure(state=NORMAL)<br>
                            self.zoznamMena.append(self.udajMeno)<br>
                            self.VarPZM.set("")<br>
                            self.VarPPA.set("")<br>
                            self.adresy.append([self.udajMeno,self.udajAdresu])<br>
                            self.OverovaciToken=0<br>
                    # funkcia, čo sa má stať po zdarnom zadaní informácie do políčka Meno. Dané políčko<br>
                    # sa disabluje, údaj z neho sa uloží. + špecialita overovací token. Ak dosiahne hodnotu 2,<br>
                    # program zistí, že má spravit ďalšiu "obrátku" pri pridávaní do zoznamu<br>
                    def entri(StlaceneBolo):<br>
                        StlaceneBolo.widget.configure(state=DISABLED)<br>
                        self.udajAdresu=str(self.PolePreAdresu.get())<br>
                        self.OverovaciToken+=1<br>
                        if self.OverovaciToken==2:<br>
                            self.PolePreVstupMena.configure(state=NORMAL)<br>
                            self.PolePreAdresu.configure(state=NORMAL)<br>
                            self.zoznamMena.append(self.udajMeno)<br>
                            self.VarPZM.set("")<br>
                            self.VarPPA.set("")<br>
                            self.adresy.append([self.udajMeno,self.udajAdresu])<br>
                            self.OverovaciToken=0<br>
                    # táto funkcia zase slúži na definovanie činnosti políčka Adresy. Zapíše údaj<br>
                    # do zoznamu a disabluje políčko. Malo by to zabezpečiť zadávanie.<br>
                    self.PolePreVstupMena.bind("<Return>",enter)<br>
                    self.PolePreAdresu.bind("<Return>",entri)<br>
                    # čo sa má stať po stlačení Entrov v rôznych okienkach<br>
                  <br>
                def nacitanie_dat():<br>
                    "Táto funkcia by mala zabezpečiť zobrazenie, resp. načítanie dát zo zoznamu."<br>
                    self.OknoNacitanie=Toplevel()<br>
                    self.OknoNacitanie.title("Načítanie dát")<br>
                    # vytvorené vlastné okno pre načítanie dát, kde by sa teoreticky mali zobrazovať<br>
                    # dáta uložené v zozname adries<br>
                    self.oknoNacitanieZobrazenie=Label(self.OknoNacitanie,bg="lightblue",text="")<br>
                    self.oknoNacitanieZobrazenie.grid(row=0,column=0)<br>
                    self.premenna="""\tMená\t\tAdresy\n***************************************\n"""<br>
                    if len(self.adresy)==0:<br>
                        self.oknoNacitanieZobrazenie.configure(text="Zoznam je prázdny.")<br>
                    else:<br>
                        for p in self.adresy:<br>
                            self.coNacitaj="\t{0}\t\t{1}\n".format(p[0],p[1])<br>
                            self.premenna+=self.coNacitaj<br>
                        self.oknoNacitanieZobrazenie.configure(text=self.premenna)<br>
                    # toto by malo zabezpečiť zdarné zobrazovanie položiek zoznamu<br>
              <br>
                    
self.tlacitkoUkoncitON=Button(self.OknoNacitanie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
 toto okno",command=self.OknoNacitanie.destroy)<br>
                    self.tlacitkoUkoncitON.grid(row=1,column=0,sticky=N+S+E+W)<br>
                    # toto tvorí tlačítko, ktoré by mohlo zavrieť okno<br>
              <br>
                def ulozenie_do_suboru():<br>
                    "Toto má na starosti zdarné uloženie dát do súboru. Trošku nám pomôže predošlá funkcia, načítanie dát."<br>
                    self.OknoUlozenie=Toplevel()<br>
                    self.OknoUlozenie.title("Uloženie do súboru")<br>
                    
self.OknoUlozenieLabelVyber=Label(self.OknoUlozenie,text="Vyberte meno 
súboru, do ktorého chcete uložiť dáta zo súboru.",bg="lightblue")<br>
                    self.OknoUlozenieLabelVyber.grid(row=0,column=0,columnspan=2,sticky=W+E+N+S)<br>
                    # vytvorené ukladacie okno, nastavený popisok pre neho + popisok pre políčko pre zadanie mena ukladacieho súboru<br>
                    self.OUPPV=StringVar()<br>
                    self.OUPolePreVstup=Entry(self.OknoUlozenie,bg="lightyellow",font="Arial 8",textvariable=self.OUPPV)<br>
                    self.OUPolePreVstup.grid(row=0,column=2,columnspan=2,sticky=W+E+N+S)<br>
                    # pole, kam môžeme zadávať samotný názov súboru<br>
                    self.OUPosudzovaciaHlaska=Label(self.OknoUlozenie,bg="lightblue",text="")<br>
                    self.OUPosudzovaciaHlaska.grid(row=1,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    # tu sa vypíš prípadná chybová hláška, v závislosti od toho, čo zadáme do zmieneného políčka<br>
                    def entricek(ppv):<br>
                        self.result=str(self.OUPolePreVstup.get())<br>
                        if len(self.result)==0:<br>
                            self.OUPosudzovaciaHlaska.configure(text="Nezadali ste meno žiadneho súboru.")<br>
                            self.OUPPV.set("")<br>
                            return<br>
                        # ak ste nezadali nič, tak vypíše hlášku, znuluje hodnotu pola a zavrie funkciu<br>
                        if len(self.adresy)==0:<br>
                            self.OUPosudzovaciaHlaska.configure(text="Zoznam adries je prázdny.")<br>
                            self.OUPPV.set("")<br>
                            return<br>
                        # podobné ako v predchádzajúcom prípade, ibaže ak je zoznam adries prázdny<br>
                        self.subor=open(self.result,"wt")<br>
                        try:<br>
                            self.subor.write(self.premenna)<br>
                        except:<br>
                            self.OUPosudzovaciaHlaska.configure(text="Zatial ste nenačítali žiadne dáta. Urobte tak cez hlavné menu.")<br>
                            self.subor.close()<br>
                            self.OUPPV.set("")<br>
                            return<br>
                            # stale je možnost že uživatel nenačítal požadované dáta na vloženie<br>
                        self.OUPosudzovaciaHlaska.configure(text="Zatial ste nenačítali žiadne dáta. Urobte tak cez hlavné menu.")<br>
                        self.subor.close()<br>
                        self.OUPolePreVstup.configure(state=DISABLED)<br>
                        # toto sa stane v pripade že chyba nenastala,<br>
                    self.OknoUlozenie.bind("<Return>",entricek)<br>
                    
self.OUTlacitkoZavri=Button(self.OknoUlozenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
 toto okno",command=self.OknoUlozenie.destroy)<br>
                    self.OUTlacitkoZavri.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)<br>
                    # urobené tlačítko, ktoré zavrie okno<br>
              <br>
                def odstranenie_poloziek():<br>
                    "Odstránenie jedného záznamu zo zoznamu adries a mien"<br>
                    self.OknoOdstranenie=Toplevel()<br>
                    self.OknoOdstranenie.title("Odstranenie poloziek")<br>
                    self.OOpripravenytext=[]<br>
                    # vytvorené okno odstránenia, nastavený popisok + náradíčko = prázdny zoznam<br>
                    for x in self.zoznamMena:<br>
                        self.OOpripravenytext.append(x)<br>
                    
self.OOodstranenieLabel=Label(self.OknoOdstranenie,bg="lightblue",text="Vyberte
 si položku zoznamu,ktorú\nchcete odstrániť:")<br>
                    self.OOodstranenieLabel.grid(row=0,column=0)<br>
                    # pripraví zoznam položiek pre neskoršie odstranovanie + vytvorenie labelu na odstranenie<br>
                    # položky<br>
                    self.OOPPO=StringVar()<br>
                    self.OOPolePreOdstranenie=Entry(self.OknoOdstranenie,bg="lightyellow",textvariable=self.OOPPO,font="Arial 8")<br>
                    self.OOPolePreOdstranenie.grid(row=0,column=1,columnspan=2,sticky=W+E+S+N)<br>
                    self.OOLabelChybovaHlaska=Label(self.OknoOdstranenie,bg="lightblue",text="")<br>
                    self.OOLabelChybovaHlaska.grid(row=1,column=0,columnspan=3,sticky=W+E+S+N)<br>
                    # samotné políčko, kam možete zadat meno položky (meno konk.osoby, ktorú chcete odstrániť<br>
                    def stlacil_entri(gangnam):<br>
                        coBoloStlacenee=str(self.OOPolePreOdstranenie.get())<br>
                        if coBoloStlacenee in self.zoznamMena:<br>
                            indexCoBoloStlacenee=self.zoznamMena.index(coBoloStlacenee)<br>
                        else:<br>
                            self.OOLabelChybovaHlaska.configure(text="Neexistujúce meno.")<br>
                            self.OOPPO.set("")<br>
                        del self.adresy[indexCoBoloStlacenee]<br>
                        del self.zoznamMena[self.zoznamMena.index(coBoloStlacenee)]<br>
                        self.OOPPO.set("")<br>
                        # zoberieme to z políčka pre vstup, ak je v zozname mien, odstrán z oboch zoznamov<br>
                        # ak nie, vyhod chybove hlasky. Samozrejmostou je nasledne premazanie policka<br>
                    self.OOPolePreOdstranenie.bind("<Return>",stlacil_entri)<br>
                    
self.OOZavriOkno=Button(self.OknoOdstranenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
 toto okno",command=self.OknoOdstranenie.destroy)<br>
                    self.OOZavriOkno.grid(row=2,column=0,columnspan=3,sticky=W+E+S+N)<br>
                    # zabezpečená akcia pre pole pre vstup po stlačení Enteru.<br>
                    # vytvorené tlačítko na zavretie okna<br>
                      <br>
                  <br>
                self.HOtlacitkoNacitat.configure(command=nacitanie_dat)<br>
                self.HOtlacitkoUlozit.configure(command=ulozenie_do_suboru)<br>
                self.HOtlacitkoZadavatAdresy.configure(command=zadavanie_adries)<br>
                self.HOtlacitkoOdstranitAdresy.configure(command=odstranenie_poloziek)<br>
              <br>
                self.hlavneOkno.mainloop()<br>
              <br>
        #########################################################<br>
                  <br>
        inst=Zaznamnik()<br>
        inst.program()<br>
                  <br>
        Ďakujem za akúkolvek odpoved</p></span>
                                                                                </div></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>