J'apprends Python et j'essaie de simuler un jeu de cartes. J'ai une question concernant la notation par points. J'ai regardé partout sur Internet pour une réponse spécifique, mais j'ai été incapable d'en trouver un.Notation par points en Python. La méthode devrait-elle venir avant ou après l'objet?
Pourquoi est-il, que, parfois, nous apprenons à appeler une méthode en notation point comme ceci:
object.methodName()
Alors que d'autres fois, on nous montre l'appeler comme ceci:
className.methodName(object)
Qu'est-ce que est la différence?
Voici un exemple spécifique. Ceci est une définition de la méthode du livre (Comment penser comme un informaticien)
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)
Parfois, l'objet vient avant la méthode:
self.isEmpty()
Parfois, l'objet vient après la méthode, dans la parenthèse :
Deck.__str__(self)
Quelle méthode utilisons-nous? Est-ce que ça importe?
'Deck' est une * classe *, et' Deck .__ str__' est une méthode non liée. Si vous avez essayé 'self .__ str __()' à la place, vous appelleriez à nouveau la méthode 'Hand .__ str __()' (provoquant une erreur de récursion infinie), vous voulez la classe parent, donc elle est appelée explicitement. –
Cependant, appeler la classe comme ça n'est pas recommandé. Utilisez 'super() .__ str __()' à la place (et laissez 'super()' comprendre ce qu'est la classe parente et comment trouver 'Deck .__ str__' à' self' correctement). –
Vous avez remplacé la méthode '__str__' dans la sous-classe' Hand', ce qui est nécessaire pour appeler la version parente de '__str__'. Comme mentionné, vous devriez faire 'super() .__ str __()' à la place car il traite des structures d'héritage plus compliquées. – tdelaney