[python] class a subclass

mtip mtip na atlas.cz
Pátek Listopad 10 18:14:09 CET 2006


>>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





Další informace o konferenci Python