[python] class a subclass

mtip mtip na atlas.cz
Sobota Listopad 11 07:45:23 CET 2006


Diky za odpovedi, opravdu jsem si to OOP spatne vylozil. Dosud jsem
psal v jazyku, kde prekryvani metod nebylo mozne.
Mohli by jste mi tedy na konkretnim prikladu napsat, jak postupovat ?

class table:
    '''zpracovava udalosti nad tabulkou
    (pohyb po zaznamech, zmeny zaznamu atd)'''

    def move(self,recordNum):
        '''posun po zaznamech'''
        pass

    def refresh(self,tbl):
        '''obnovi tabulku'''
        pass

    def create(self,fields,tbl):
        this.__fields=fields #ulozi nove nazvy poli
        this.refresh() #obnovi tabulku (S POTOMKEM VYTVORI CHYBU)

#nyni se mi zda vse ok a rekneme ze zatim netusim, zda potomek teto tridy bude vubec kdy existovat
#je uz ted chyba volat verejnou metodu refresh() pomoci self.refresh() ???

class sql(table):
    '''prebira vse z table a vylepsi metody create a refresh'''
    def refresh(self):
        '''prekryje metodu rodice
        nacte zaznamy napr z MySQL a posle do rodice tb'''
        #neco jako opakuj posledni SELECT a ziskej pole tbl
        table.refresh(self,tbl)
        
    def create(self,sqlText):
        '''prekryje metodu rodice
        nacte novou tabulku z sql do pole a preda ho rodici'''
        #neco jako
        #tbl = run (SELECT...)
        #fields = nazvy poli z dotazu select
        table.create(self,fields,tbl)

#podle me to vypada logicky a na prvni pohled je vse ok, dokonce je vhodne prekryti obou metod,
# aby nedoslo k chybe pri vymene tabulky v rodici, kdyz o tom potomek nebude vedet
#az na skutecnost, ze:
# metoda sql.create zavola prekrytou table.create -> to je preci bezne
# metoda table.create ulozi fields a zavola self.refresh() OVSEM TEN SKONCI V POTOMKU A DOJDE K CHYBE!!!

#kdyz to tedy shrnu trida table ma predem tusit, ze se na ni nekdo v budoucnu muze prilepit
# a tak ma volat sve verejne metody jako table(self,..) ?

# DALO BY SE TOHLE RICT JAKO ZASADA OOP V PYTHONU ?

#NEBO BY JSTE TOHLE VYRESILI NEPREKRYTIM METODY refresh() ?
#avsak tato metoda rodice pak uz nebude mit vyznam a bude zbytecna a matouci

Diky, uz s tim nebudu dal prudit :-)))
Mirek Nemecek.


----------------------------------------------------------------------------------------------------------


>> Možná je chyba v tom mentálním obraze rodič-potomek.
>> Instance odvozené třídy je instance potomka. Žádná
>> související instance rodičovské třídy neexistuje.

s> Tohle jsem už psal taky, že je na 99% chyba v architektuře.

>> Potomek se chová "úplně jako tata", jenom některé
>> věci dělá trošku jinak. Prober si tohle

s> Jinak ten příklad synek je naprosto a dokonale instruktivní. Nic lepšího
s> jsem neviděl, škoda že jste mě neučil, když jsem s tím začínal. Docela
s> jsem se nasmál. Jasné, jednoduché, skvělé.
s> _______________________________________________
s> Python mailing list
s> Python na py.cz
s> http://www.py.cz/mailman/listinfo/python



Další informace o konferenci Python