Seite 1 von 1

Neu hier und gleich eine Frage

Verfasst: Montag 29. August 2022, 19:30
von mustafa08
Hallo Forum Gemeinde,

ich bin der Mustafa und bin angehender IT-Techniker. Ich bin seit einiger Zeit dran, Python zu lernen. Das kommende Schuljahr werden wir es in der Schule auch lernen.
Ich mache aktuell einen Online Kurs und komme an einer Sache nicht weiter und weiß nicht, wo der Fehler ist. Kann mir da jemand helfen?
Hier der Code:

class Cube():

def _init_(self, side):
self.side = side

def surface(self):
print(self.side ** 2 + 6)

def volume(self):
print(self.side ++ 3)

a = Cube(3)

a.surface()
a.volume()

--------------------------------------------------
Das kommt als Meldung:

TypeError Traceback (most recent call last)
Input In [79], in <cell line: 12>()
9 def volume(self):
10 print(self.side ++ 3)
---> 12 a = Cube(3)
14 a.surface()
15 a.volume()

TypeError: Cube() takes no arguments

Danke

Re: Neu hier und gleich eine Frage

Verfasst: Montag 29. August 2022, 20:46
von sparrow
Wenn du deinen Code hier in Code-Tags setzt (die erscheinen automatisch, wenn du im vollständigen Editor den </> Button drückst), dann bleibt auch die Formatierung erhalten.

Die Fehlermeldung sagt, dass deine Klasse "Cube" keinerlei Argumente erwartet, wenn sie initialisiert wird. Das liegt daran, dass du keine __init__ Methode hast. Hast du? Bist du sicher, dass sie uterstrich unterstrich init unterstrich unterstrich heißt?

Re: Neu hier und gleich eine Frage

Verfasst: Dienstag 30. August 2022, 08:11
von mustafa08
Hi und danke für deine Antwort.
Ja die init Methode habe ich so programmiert:
_init_.

Re: Neu hier und gleich eine Frage

Verfasst: Dienstag 30. August 2022, 08:25
von noisefloor
Hallo,

ok, das ist der Fehler. Die Init-Methode von Klassen braucht zwei Unterstriche vor und nach init, also __init__ .

Wenn du _init_ schreibst, dann hast du eine Methode mit dem Namen _init_ , die keine spezielle Bedeutung hat und die du über Klasse._init_() aufrufen kannst / musst.

Gruß, noisefloor

Re: Neu hier und gleich eine Frage

Verfasst: Dienstag 30. August 2022, 12:12
von ThomasL
und bei der Methode volume() die beiden ++ durch ** ersetzen

Code: Alles auswählen

def volume(self):
    print(self.side ** 3)
noch besser wäre es, wenn die Methode das Volumen als Wert zurück gibt

Code: Alles auswählen

def volume(self):
    return self.side ** 3
das Volumen wird dann durch den Aufruf der Methode ausgegeben

Code: Alles auswählen

wuerfel = Cube(3)
print(wuerfel.volume())
Noch eleganter wird es durch dekorieren der Methode als property der Klasse

Code: Alles auswählen

@property
def volume(self):
    return self.side ** 3
dann kann das Volumen durch Verwendung des Methodennamens ausgegeben werden

Code: Alles auswählen

wuerfel = Cube(3)
print(wuerfel.volume)

Re: Neu hier und gleich eine Frage

Verfasst: Dienstag 30. August 2022, 20:22
von mustafa08
Super, vielen Dank. Das war mein Fehler. Dachte ich werde noch verrückt