[python] class a subclass

Roman Miklos RMiklos na pss.sk
Pátek Listopad 10 18:52:59 CET 2006


Problem je asi niekde v tom, ze v potomku v metode ma() odovzdavas
self t.j. referenciu na instanciu triedy b (potomka)
super(b,self).ma()
 
Neviem naco by sa v tej funkcii super() mala davat referencia na potomka, 
ked to ma ist do rodica.
Ja som to skusal aj inac ale nejde mi to. Predtym som super() nikdy 
nepouzil. Podla mna tam niekde je problem.






mtip <mtip na atlas.cz> 
Sent by: python-bounces na py.cz
10.11.2006 18:14
Please respond to
Konference PyCZ <python na py.cz>


To
Konference PyCZ <python na py.cz>
cc

Subject
Re: [python] class a subclass






>>Proc by mel Python hledat
>>nejprve metodu v potomku, kdyz ji volam z rodice ?

RM> ale ty vytvoris instanciu potomka a volas teda metodu potomka takto
RM> x=b()
RM> x.ma()

ME NEJDE O TO x.ma(). JDE O TO:
x.ma()- > vola ma() v potomku = OK
ma() uvnitr vola rodicovske ma() = OK
rodicovske ma() uvnitr vola self.prn() a to se vrati k potomkovi,
protoze existuje stejna metoda b.ma()  a to je podle me chyba !
tady by mel rodic volat svoje ma().
Mirek.
















RM> mtip <mtip na atlas.cz> 
RM> Sent by: python-bounces na py.cz
RM> 10.11.2006 17:24
RM> Please respond to
RM> Konference PyCZ <python na py.cz>


RM> To
RM> Konference PyCZ <python na py.cz>
RM> cc

RM> Subject
RM> Re: [python] class a subclass






RM> Zkusil jsem super a vysledek je ten samy.
RM> class a(object):
RM>     def prn(self):
RM>         print 'a',self
RM>     def ma(self):
RM>         self.prn()
RM>     def aa(self):
RM>         pass

RM> class b(a):
RM>     def prn(self):
RM>         print 'b',self
RM>     def ma(self):
RM>         '''prekryje a.ma()'''
RM>         super(b,self).ma()
RM>     def ba(self):
RM>         pass


RM> x=b()
RM> x.ma()
 

RM> Zjistil jsem, ze to funguje, jen pokud to zavolam takto:
RM> class b(a):
RM>     def prn(self):
RM>         print 'b',self
RM>     def ma(self):
RM>         '''prekryje a.ma()'''
RM>         a.ma(a())
RM>     def ba(self):
RM>         pass

RM> Coz je samozrejme nesmysl, protoze vytvarim novou instanci a.
RM> Tak se mi zda, ze tohle je neprijemna chyba. Proc by mel Python hledat
RM> nejprve metodu v potomku, kdyz ji volam z rodice ?

RM> Mirek.

s>> Pouľij slovo super.

s>> super(a,x).ma()

s>> Miloslav Ponkrác

RM> _______________________________________________
RM> Python mailing list
RM> Python na py.cz
RM> http://www.py.cz/mailman/listinfo/python


RM> Mgr. Ing. Roman MIKLÓ© 
RM> Prvá stavebná sporiteµňa a.s. 
RM> Bajkalská 30, P. O. Box 48 
RM> 829 48  Bratislava 25 
RM> Tel.: +421/ 2 / 582 31 174 
RM> Fax: +421/ 2 / 582 31 109 

RM> _______________________________________________
RM> Python mailing list
RM> Python na py.cz
RM> http://www.py.cz/mailman/listinfo/python



_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python


Mgr. Ing. Roman MIKLÓ© 
Prvá stavebná sporiteµňa a.s. 
Bajkalská 30, P. O. Box 48 
829 48  Bratislava 25 
Tel.: +421/ 2 / 582 31 174 
Fax: +421/ 2 / 582 31 109 



Daląí informace o konferenci Python