[python] class a subclass
Roman Miklos
RMiklos na pss.sk
Pátek Listopad 10 19:09:03 CET 2006
Vsetko funguje jak ma, pozri na toto
--------------------
class a(object):
def prn(self):
print 'a',self
def ma(self):
print "ma() rodica", self
self.prn()
def aa(self):
pass
class b(a):
def prn(self):
print 'b',self
def ma(self):
'''prekryje a.ma()'''
print "ma() potomka", self
super(b,self).ma()
def ba(self):
pass
x=b()
x.ma()
----------------
ked to spustis dostanes toto
ma() potomka <__main__.b object at 0x00A22F50>
ma() rodica <__main__.b object at 0x00A22F50>
b <__main__.b object at 0x00A22F50>
1) takze najprv si v ma()-potomka, to ti vypise
ma() potomka <__main__.b object at 0x00A22F50>
tu ma self objektu x hodnotu <__main__.b object at 0x00A22F50>
2) teraz super(b,self).ma()
zavola ma() rodica (triedy a) ale odovzda jej self potomka, t.j. objektu x
t.j. ako vidis to iste cislo: <__main__.b object at 0x00A22F50>
3)Teraz v ma()-rodica volas
self.prn(), lenze self ma hodnotu <__main__.b object at 0x00A22F50> a to
mu odovzdas, a to je referncia na potomka, takze sa zavola metoda
prn z potomka (a nie z rodica) a ta ti vytiskne
b <__main__.b object at 0x00A22F50>
self rodica si nikde nezistil, lebo si tam nevytvoril na neho instanciu a
tak ani nemozes zavolat jeho metodu prn()
V Pythone realizovali OOP (podla mna) podobne ako v Perle, jedna sa
vlastne o slovniky referencii ci uz na datove struktury, alebo na kod.
V Perle OOP na nizsej urovni (to je primitivnejsie), ale clovek tam zas
lepsie vidi preco je to tak a jak to funguje.
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