Neu hier und gleich eine Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mustafa08
User
Beiträge: 3
Registriert: Montag 29. August 2022, 19:25

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
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

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?
mustafa08
User
Beiträge: 3
Registriert: Montag 29. August 2022, 19:25

Hi und danke für deine Antwort.
Ja die init Methode habe ich so programmiert:
_init_.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
mustafa08
User
Beiträge: 3
Registriert: Montag 29. August 2022, 19:25

Super, vielen Dank. Das war mein Fehler. Dachte ich werde noch verrückt
Antworten