Keresés

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

  • #82595328

    törölt tag

    válasz cousin333 #1252 üzenetére

    Köszönöm a válaszokat, Igazából egyik sem az, amit szeretnék. Azt hiszem, nem voltam teljesen világos.

    Valójában az osztályok egyik előnyét akartam kipróbálni, hogy hogy tudok egy osztályt felhasználva létrehozni egy új osztályt. Azaz a régi osztályt megtartani, de egy új osztállyal kiegészíteni vagy a mostani esetben felülírni a régi osztály attribútumait és metódusait.

    Azaz elsőkörben létrehoztam egy osztályt:

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

    Ebben ugye van attribútum, és metódus is.

    Ezt kiegészítettem egy példányosítással és adatbekéréses értékadással.

    a = int(input('Adj egy számot!'))
    b = int(input('Adj még egy számot'))
    egyke = Egy(a, b)

    A végén pedig kiírattam.

    print ('Egyik = %s' % egyke.egyik)
    print ('Masik = %s' % egyke.masik)
    print ('Szorzat = %s' % egyke.szorzat())

    Eddig egyszerű volt, és boldogultam is.

    Most jönne a feladat, vagyis a problémám.
    Szeretném felhasználni az előbb létrehozott osztályt egy másik osztályhoz úgy, hogy az új osztály a régi osztály egy attribútumát felülírja. Aztán a metódust írnám felül, aztán adnék hozzá új attribútumot és metódust.

    De már az első sem megy, azaz szeretném felülírni az új osztállyal a régi egyik attribútumát, de csak az egyiket.
    Alapvetően azt gondoltam, hogy ez tök egyszerű felveszem az egyik attribútumot az új osztályba:

    class Ketto(Egy):

    def __init__(self, egyik):
    self.egyik = egyik

    És minden más változatlan.

    Azaz a programnak az elgondolásom szerint így kéne kinéznie:

    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):
    self.egyik = egyik

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

    Ez pedig a hibaüzenet:
    Traceback (most recent call last):
    File "/home/sire/teszte.py", line 16, in <module>
    egyke = Ketto(a, b)
    TypeError: __init__() takes 2 positional arguments but 3 were given

    Nem értem mi a baj. Elvileg 2 változóm van.Mindkettő az első osztályból jön, csak az egyiket lecserélem a második osztályból. Ez lenne nekem a logikus. Mit csinálok rosszul, és mi a jó megoldás.

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