• Register

Podedovanje - mojSeznam

+10 votes
244 views

Pozdravljeni!

Zanima me primer sledeči primer dedovanja. Kot je na vajah bilo že omenjeno, recimo da želimo s svojim razredom 'mojSeznam' podedovati integriran razred 'list'. Eden izmed načinov je bil predstavljen takole:

class mojSeznam1(list):
    def narisi(self):
        plt.plot(self)
        plt.show()

1. vprašanje )
Kako je sploh mogoče kreirati razred, če le-ta vidno ne vsebuje __init__( ) funkcije, ki je potrebna za kreacijo novega objekta?

2. vprašanje )
Če gremo dalje, recimo da dodamo našemu razredu funkcijo __init__( ) . Kaj se s tem spremeni, oziroma je potrebno kaj dodati? Ali še bolj na kratko, je to sploh mogoče in kaj je potrebno dodati spodnjemu novemu razredu?

class mojGraf2(list):
    def __init__(self):
        ...
    def narisi(self):
        ...


Vprašanje se zdi "tricky" in hkrati tudi je. Ampak razumevanje tega "fenomena" je velik korak bližje k razumevanju objektnega programiranj - najmočnejšega orodja vsakega, ki se občasno ukvarja s programiranjem.

asked Oct 28, 2016 by aljazjelen (11,190 points)

1 Answer

+4 votes
 
Best answer

1) V navedenem primeru class mojSeznam1() podeduje lastnosti iz 'list', ko ga kreiraš se bo obnašal enako kot klasičen seznam, imel pa bo dodano možnost izrisa (funkcija narisi(self)):

Lahko narediš tudi class ki nima niti konstruktorja niti ne podeduje lastnosti drugega classa. V tem primeru je class nekakšna 'knjižnica' funkcij:

2) Če želiš podedovati lastnosti drugega classa, obenem pa dodati svoje, moraš v konstruktorju svojega classa klicati konstruktor classa, iz katerega želiš podedovati lastnosti. To lahko narediš s funkcijo super():

answered Oct 28, 2016 by Blaž Velkavrh (29,970 points)
selected Nov 10, 2016 by aljazjelen
...