Ich lerne Python und versuche ein Kartenspiel zu simulieren. Ich habe eine Frage zur Punktnotation. Ich habe überall im Internet nach einer bestimmten Antwort gesucht, konnte aber keine finden.Punktnotation in Python. Sollte Methode vor oder nach dem Objekt kommen?
Warum ist es, dass manchmal gelehrt werden wir so ein Verfahren in Punktnotation zu nennen:
object.methodName()
Während andere Zeiten, die wir es so dargestellt nennen:
className.methodName(object)
Was ist der Unterschied?
Hier ist ein spezifisches Beispiel. Dies ist eine Methode Definition aus dem Buch (Wie wie ein Informatiker denken)
class Hand(Deck):
def __init__ (self, name = " "):
self.cards = []
self.name = name
def __str__(self):
s = "Hand "+ self.name
if self.isEmpty():
return s+" is empty\n"
else:
return s+ " contains\n" + Deck.__str__(self)
Manchmal ist das Objekt kommt, bevor das Verfahren:
self.isEmpty()
Manchmal ist das Objekt kommt nach der Methode, in der Klammer :
Deck.__str__(self)
Welche Methode verwenden wir? Ist es wichtig?
"Deck" ist eine * Klasse *, und "Deck .__ str__" ist eine ungebundene Methode. Wenn Sie stattdessen 'self .__ str __()' ausprobiert haben, würden Sie die Methode 'Hand .__ str __()' erneut aufrufen (was zu einem unendlichen Rekursionsfehler führt), wollen Sie die Elternklasse, also wird sie explizit aufgerufen. –
Das Aufrufen der Klasse wird jedoch nicht empfohlen. Verwenden Sie stattdessen 'super() .__ str __()' (und lassen Sie 'super()' herausfinden, was die Elternklasse ist und wie man 'Deck .__ str__' zu' self' richtig findet). –
Sie haben die Methode '__str__' in der Unterklasse' Hand' überschrieben, so dass dies erforderlich ist, um die übergeordnete Version von '__str__' aufzurufen. Wie bereits erwähnt, sollten Sie stattdessen 'super() .__ str __()' verwenden, da es sich um kompliziertere Vererbungsstrukturen handelt. – tdelaney