Új hozzászólás Aktív témák

  • cousin333

    addikt

    válasz #82595328 #1255 üzenetére

    Amikor a példádban példányosítod a Ketto osztályt (ez lenne az egyke - lehetnének konzekvensebbek is az elnevezéseid), akkor a következőt kapod: lefut a Ketto.__init__() függvény, benne értéket kap az egyik példányváltozó. Lesz egy szorzat() nevű metódusod, ami összeszorozza az egyik-et a masik-kal. Vagyis csak szorozná, de az masik nem létezik!

    A hibát azért kapod, mert a Ketto._init__() csak két paramétert vár, a self-et (ezt implicit) és az egyik-et, te viszont hármat adtál meg: a self-et, az egyik-et és a masik-at.

    Amúgy pontosan az történt, amit szerettél volna: a Ketto init-je felülírta az Egy init-jét. A probléma ott van, hogy előbbiben nem hívod meg a szülő osztály (az Egy) __init__() metódusát. Írták, hogy Egy.__init__(), de ez nem szerencsés, mert név szerint hivatkozik a szülőosztályra, helyette többnyire a super() az alkalmazandó. A kódod helyesen:

    class Egy():
    def __init__(self, egyik=1, masik=2):
    self.egyik = egyik
    self.masik = masik
    def szorzat(self):
    return self.egyik * self.masik

    class Ketto(Egy):
    def __init__(self, egyik):
    super().__init__(egyik=egyik)

    a = int(input('Adj egy számot!'))
    b = int(input('Adj még egy számot'))
    egyke = Ketto(a)
    print ('Egyik = %s' % egyke.egyik)
    print ('Masik = %s' % egyke.masik)
    print ('Szorzat = %s' % egyke.szorzat())

    A példányosításnál csak az a paramétert írtam oda. A Ketto init függvénye meghívja az Egy init függvényét, de csak egy értékkel (egyik), a masik értéke az Egy.__init__()-ben megadott alapértelmezett 2-es, emiatt a végén kiírt szorzat 2*a lesz, a b-től függetlenül.

Új hozzászólás Aktív témák