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