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

  • cousin333

    addikt

    válasz #82595328 #1250 üzenetére

    Most ez lesz belőle, ha lefuttatod:

    Traceback (most recent call last):
    File "C:\Users\cousi\.spyder-py3\temp.py", line 25, in <module>
    print ('Egyik = %s' % egyke.egyik)
    AttributeError: 'Ketto' object has no attribute 'egyik'

    Több probléma is van itt. Az egyik probléma - ami a futtatáskor is látszik -, hogy az egyik nem kap értéket. A másik, hogy a szorzat függvény, ahogy megírtad, két paramétert vár, de nem kapja meg őket (utolsó kódsor). Igaz, nincs is értelmük, mert nem használnád egyiket sem (a self.akármi az mindenhonnan látható, hiszen már átadtad a self-el). A harmadik, hogy csak a Ketto inicializáló függvénye fut le, bár ez így nem feltétlenül hiba, és az egyes probléma megszüntetésével orvosolható.

    Két lehetőség közül az első az 1-es és 2-es problémát javítja:

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

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


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

    A második pedig - némi módosítással - a 2-es és 3-as problémákat orvosolja, amivel az 1-es lesz idejétmúlt:

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

    class Ketto(Egy):
    def __init__(self, egyik, masik):
    super().__init__(egyik, masik)
    def szorzat(self):
    return self.egyik * self.masik


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

    A második megoldás inkriminált sorát így is írhatod, hogy legyen értelme is az örökléses példádnak. Ekkor az egyik az mindenképpen 1 lesz.

    super().__init__(masik=masik)

    ui: Nem tiszta, hogy tulajdonképpen mit akartál felülírni mivel... :)

    Tipp: a függvényparaméterek felsorolásánál használj szóközöket, úgy áttekinthetőbb lesz a kód.

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