[python] class a subclass

Petr Přikryl prikryl na atlas.cz
Pátek Listopad 10 23:50:24 CET 2006


mtip napsal(a):
> RM> Problem je asi niekde v tom, ze v potomku v metode ma() odovzdavas
> RM> self t.j. referenciu na instanciu triedy b (potomka)
> RM> super(b,self).ma()
>  
> RM> Neviem naco by sa v tej funkcii super() mala davat referencia na potomka,
> RM> ked to ma ist do rodica.
> RM> Ja som to skusal aj inac ale nejde mi to. Predtym som super() nikdy
> RM> nepouzil. Podla mna tam niekde je problem.
> 
> 
> To je presne ono. Ja to taky tak chapu, jenze lze ziskat neco jako
> instanci rodice ? To asi ne, podle me vsechno bezi na jedne instanci a
> to self potomka.
> Navic sem to zkusil tak, ze misto self tam vytvorim novou instanci
> rodice a poslu a uz to funguje, jak ma. Jenze ta nova instance pred
> kazdym volanim predka nelze v praxi pouzit.

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

class tata(object):

     def huli(self):
         return 'smoke'

     def chlasta(self):
         return 'glgy glgy'

     def nadava(self):
         return 'do prdele'

     def vlastnosti(self):
         return '%s, %s, %s' % (self.huli(), self.chlasta(), self.nadava())

     def __str__(self):
         return self.vlastnosti()


class synek(tata):

     def chlasta(self):
         return 'lok lok'

     def nemysli(self):
         return 'to sem magor'

     def vlastnosti(self):
         # jako tata, trochu jinak, ale navic nemysli

         return tata.vlastnosti(self) + ', ' + self.nemysli()


fotr = tata()
print fotr

syn = synek()
print syn


Vypíše to:
smoke, glgy glgy, do prdele
smoke, lok lok, do prdele, to sem magor



pepr


Další informace o konferenci Python