Thread View: pl.comp.lang.python
3 messages
3 total messages
Started by lux
Thu, 03 May 2012 20:54
Funkcja super
Author: lux
Date: Thu, 03 May 2012 20:54
Date: Thu, 03 May 2012 20:54
4 lines
1461 bytes
1461 bytes
Jestem początkujący w Pythonie, jak mam rozumieć funkcję super? To co jest w dokumentacji jest dla mnie średnio zrozumiałe, jeśli ktoś może wspomóc mnie prostym, trafnym przykładem zastosowania tej funkcji to dziękuję.
Re: Funkcja super
Author: Roman Dobosz
Date: Fri, 04 May 2012 06:12
Date: Fri, 04 May 2012 06:12
59 lines
2460 bytes
2460 bytes
On Thu, 3 May 2012 13:54:27 -0700 (PDT)
lux <naukasymfony@gmail.com> wrote:
> Jestem początkujący w Pythonie, jak mam rozumieć funkcję super? To co
> jest w dokumentacji jest dla mnie średnio zrozumiałe, jeśli ktoś może
> wspomóc mnie prostym, trafnym przykładem zastosowania tej funkcji to
> dziękuję.
http://docs.python.org/library/functions.html#super
Czyli: mamy klasę Foo, posiadającą metodę foo(), po której dziedziczy
klasa Bar również posiadająca metodę foo:
>>> class Foo(object):
... def foo(self):
... print "f"
...
>>> class Bar(Foo):
... def foo(self):
... print "b"
...
>>>
Stworzenie obiektu klasy Bar i wywołanie metody foo() spowoduje
wyświetlenie tylko napisu "b".
>>> obj = Bar()
>>> obj.foo()
b
>>>
Natomiast:
>>> class Bar(Foo):
... def foo(self):
... super(Bar, self).foo()
... print "b"
...
>>> obj = Bar()
>>> obj.foo()
f
b
>>>
Czyli, super spowodowało uruchomienie metody (foo()) na rzecz obiektu
po którym dziedziczy Bar – stąd pierwszy argument jaki super
przyjmuje to Bar a nie Foo. Oczywiście ten przykład jest bardzo
trywialny, ale nietrudno sobie wyobrazić sytuację, gdzie zamiast
printów znajduje się konkretny kod robiący istotne rzeczy.
To tylko wierzchołek góry lodowej, dokładne wyjaśnienie jak z tego
korzystać, żeby się nie skaleczyć znajdziesz pod linkami:
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
http://fuhm.net/super-harmful/
--
-^- _ coś tam w tle sobie gra, np:
_ /O)_\// Thomas "Drax" Mogensen - Heaven
(_(|__(_(_) grf.
Re: Funkcja super
Author: lux
Date: Sat, 05 May 2012 17:33
Date: Sat, 05 May 2012 17:33
65 lines
3056 bytes
3056 bytes
On 4 Maj, 08:12, Roman Dobosz <gryf_esm...@spam-o2.pl> wrote: > On Thu, 3 May 2012 13:54:27 -0700 (PDT) > > lux <naukasymf...@gmail.com> wrote: > > Jestem początkujący w Pythonie, jak mam rozumieć funkcję super? To co > > jest w dokumentacji jest dla mnie średnio zrozumiałe, jeśli ktoś może > > wspomóc mnie prostym, trafnym przykładem zastosowania tej funkcji to > > dziękuję. > > http://docs.python.org/library/functions.html#super > > Czyli: mamy klasę Foo, posiadającą metodę foo(), po której dziedziczy > klasa Bar również posiadająca metodę foo:>>> class Foo(object): > > ... def foo(self): > ... print "f" > ...>>> class Bar(Foo): > > ... def foo(self): > ... print "b" > ... > > > > Stworzenie obiektu klasy Bar i wywołanie metody foo() spowoduje > wyświetlenie tylko napisu "b". > > > > >>> obj = Bar() > >>> obj.foo() > b > > Natomiast: > > >>> class Bar(Foo): > > ... def foo(self): > ... super(Bar, self).foo() > ... print "b" > ...>>> obj = Bar() > >>> obj.foo() > > f > b > > > > Czyli, super spowodowało uruchomienie metody (foo()) na rzecz obiektu > po którym dziedziczy Bar - stąd pierwszy argument jaki super > przyjmuje to Bar a nie Foo. Oczywiście ten przykład jest bardzo > trywialny, ale nietrudno sobie wyobrazić sytuację, gdzie zamiast > printów znajduje się konkretny kod robiący istotne rzeczy. > > To tylko wierzchołek góry lodowej, dokładne wyjaśnienie jak z tego > korzystać, żeby się nie skaleczyć znajdziesz pod linkami: > > https://rhettinger.wordpress.com/2011/05/26/super-considered-super/http://fuhm.net/super-harmful/ > > -- > -^- _ coś tam w tle sobie gra, np: > _ /O)_\// Thomas "Drax" Mogensen - Heaven > (_(|__(_(_) grf. Dziękuję
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads