Keresés

Ú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.

  • axioma

    veterán

    válasz #82595328 #1255 üzenetére

    Varj, most a Ketto-nek a peldanyositasaval van gond, mert a kod szerint o egy komplett Egy-et var.
    Csereld ki a reklamalt sort egyke = Ketto(Egy(a, b))-re, es eltunik a hibauzenet.
    De!
    Ez igy onmagaban nem jo. Mert a Ketto nem fogja a _sajat_ egyik, masik-aban latni az Egy peldanyban meglevo ertekeket. Ahhoz ki kene szedned az orokolt valtozokba... az az ossel inicializalas ertem hogy miert jutott eszedbe, de nagyon nem jo, felvettel egy uj member valtozot, aminek semmi koze a mukodeshez, mert az az orokolt valtozok alapjan megy.

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