Klassen und instanzen

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
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

Bild


Laut Aufgabenstellung soll ich in diesen Code eine Instanz mit dem Namen ShoppingCart machen.
Aber ich versteht nicht ganz, was gemeint ist...

Könnt ihr mir da helfen?
Ich möchte nicht die Lösung wissen, sondern was genau die Aufgabe von mir will...

Was genau ist mit "Instanz" gemeint?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Bitte keine Bilder posten, sondern den Code ins Forumpost kopieren.
Python2 sollte man nicht mehr benutzen und daher auch nicht damit lernen.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Ein Kurs der was anderes zeigt, sollte man nicht verwenden.
Strings setzt man auch nicht mit + zusammen, sondern benutzt Stringformatierung.
Das items_in_cart ist etwas lang, wenn die Klasse schon ShoppingCart heißt, da würde `items` reichen.
Ein ganz großer Fehler, ist, dass items_in_cart ein Klassenattribut ist. Klassenattribute werden sehr selten gebraucht und dann sollten das Konstanten sein. Das Beispiel ist also kaputt und sollte nicht verwendet werden.
`not product in items` sollte `product not in items` sein.

In der Aufgabenstellung heißt es, dass man eine Instanz mit Namen my_cart von der Klasse ShoppingCart erzeugen soll.
Alles in Python ist eine Instanz von irgendetwas anderem. Oft wird von Objekten geredet, die eine Instanz von einer Klasse sind.
Bei a = 17 ist a eine Instanz der Klasse int mit dem Wert 17.
Mit b = str(a) wird eine Instanz der Klasse str erzeugt.
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

mir ist das Alter von Python2 bewusst und auch den schon gegebene(nicht selbst geschriebene) Code würde ich anders schreiben..

Aber meine Frage ist, was genau eine Instanz von "ShoppingCart" mit dem Namen "my_cart" sein soll...
Will die Aufgabe, dass ich eine neue Funktion hinzufüge? eine Neue Classe? Irgendwas anderes?

Auch das mit den 4 Leerzeichen bzw. 2x TAB ist mir auch bewusst, stört mich aber hier nicht... Ich lerne Python 2 um ein Grundverständnis vom Programmieren zu bekommen. Nachdem ich den Python 2 Kurs gemacht habe, schau ich mir nochmal an, was genau in Python 3 anders ist, bzw. verändert wurde, was schwerer gemacht wurde, was einfacher gemacht wurde usw...

EDIT:
Das mit den 4 Leerzeichen aka 2x TAB stört mich auf der Website nicht... Wenn ich mit VSCode arbeite sinds ja automatisch 4 Teerzeichen...
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

Sirius3 hat geschrieben: Donnerstag 15. Oktober 2020, 12:29 Bei a = 17 ist a eine Instanz der Klasse int mit dem Wert 17.
Mit b = str(a) wird eine Instanz der Klasse str erzeugt.
Okay... und a, bzw. b sind dann jeweils eine Instanz?

Wäre dann anhand der Aufgabe:

Code: Alles auswählen

my_cart = ShoppingCart("Book") # richtig?
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

Code: Alles auswählen

class ShoppingCart(object):
  """Creates shopping cart objects
  for users of our fine website."""
  
  def __init__(self, customer_name):
    self.customer_name = customer_name
    self.items_in_cart = {}
    
  def add_item(self, product, price):
    """Add product to the cart."""
    if not product in self.items_in_cart:
      self.items_in_cart[product] = price
      print product + " added."
    else:
      print product + " is already in the cart."

  def remove_item(self, product):
    """Remove product from the cart."""
    if product in self.items_in_cart:
      del self.items_in_cart[product]
      print product + " removed."
    else:
      print product + " is not in the cart."


Hier der Code der schon gegeben ist
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wenn du eine Instanz der Klasse "ShoppingCart" anlegen möchtest, die an den Namen "my_cart" gebunden ist und dessen Attribut "customer_name" den Wert "Book" hat, dann ja.
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

sparrow hat geschrieben: Donnerstag 15. Oktober 2020, 12:44 Wenn du eine Instanz der Klasse "ShoppingCart" anlegen möchtest, die an den Namen "my_cart" gebunden ist und dessen Attribut "customer_name" den Wert "Book" hat, dann ja.
Ahhh... jetzt verstehe ich es... das Attribut, dass direkt in ShoppingCart() steht ist der "customer_name" und das Attribut, dass in der methode ".add_item()" steht ist das "product" und der "price"?

Demnach müsste:

Code: Alles auswählen

my_cart = ShoppingCart("Peter")
my_cart.add_item("Book", 20)
richtig sein.. oder?

EDIT:
Was ich auch nicht gesehen hatte ist, dass "add_item" eine Funktion in der Klasse hat....
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das ist richtig.

add_item() ist eine Methode der Klasse.
Du solltest dich mit dem Konzept von Objektorientierter Programmierung und im speziellen mit dem entsprechenden Kapitel im offiziellen Tutorial vertraut machen.
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

"Einführung in Klassen" ist gerade das Thema im Kurs den ich mache :D Daher Bin ich gerade dabei mich in die OOP einzuarbeiten ^^

Danke :)
Mr. R341
User
Beiträge: 46
Registriert: Dienstag 29. September 2020, 10:51

Und jetzt wirds (Kopftechnisch) schwer :D Jetzt ist Inheritance zu deutsch "Erbung" aufgetaucht :P

Wünscht mir Glück und Durchhaltevermögen ^^

Thread kann geschlossen werden.
Antworten