Article View: pl.comp.lang.python
Article #28417Re: Funkcja super
From: 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.
Technical Details
Message-ID:
<20120504081250.dc9ec5f2.gryf_esm-no@spam-o2.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mailReferences:
<3f7a6aeb-604c-4563-979e-1e26ea3b785c@i8g2000vbm.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail From: Roman Dobosz <gryf_esm-no@spam-o2.pl> Newsgroups: pl.comp.lang.python Subject: Re: Funkcja super Date: Fri, 4 May 2012 08:12:50 +0200 Organization: ICM, Uniwersytet Warszawski Lines: 59 Message-ID: <20120504081250.dc9ec5f2.gryf_esm-no@spam-o2.pl> References: <3f7a6aeb-604c-4563-979e-1e26ea3b785c@i8g2000vbm.googlegroups.com> NNTP-Posting-Host: ecb129.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: news.icm.edu.pl 1336111970 18076 83.22.217.129 (4 May 2012 06:12:50 GMT) X-Complaints-To: usenet@news.icm.edu.pl NNTP-Posting-Date: Fri, 4 May 2012 06:12:50 +0000 (UTC) X-Newsreader: Sylpheed 3.1.2 (GTK+ 2.24.10; i686-pc-linux-gnu) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit