2017-07-11 1 views
1

J'ai lu que le premier paramètre de méthodes est l'instance sur laquelle la méthode est appelée. Je ne comprends pas pourquoi quand j'écris cePython argument de position requis lors de l'utilisation de "self"

class A: 
    def printName(self, name): 
     print(name) 

A.printName("asd") 

Je reçois que TypeError d'erreur: printName() manquant 1 nécessaire de l'argument de position: 'nom'. Qu'est-ce qui me manque?

+1

Possible duplicate of [TypeError: manquant 1 argument de position requis: 'self'] (https://stackoverflow.com/questions/17534345/typeerror-missing-1-required-position -argument-self) –

Répondre

2

Vous devez créer une instance de classe, puis appeler la méthode sur cette instance:

class A: 
    def printName(self, name): 
     print(name) 

class_instance = A() 
class_instance.printName("asd") 
+0

merci pour la réponse. Je ne comprends pas vraiment que A.printName ("asd") n'est pas une instance – akerbeltz

+0

A est un objet de classe tandis que A() est une nouvelle instance de classe: – Andrea

+0

Jetez un oeil à la documentation: https://docs.python.org /2/tutorial/classes.html Il est très important de connaître les bases des classes. S'amuser! – Andrea

0

Cela pourrait fonctionner, en utilisant staticmethod si vous voulez appeler printName() sans créer une instance de cette classe

class A: 
    @staticmethod 
    def printName(name): 
     print(name) 

A.printName('hello') 
+0

Merci pour la réponse. Pouvez-vous expliquer ce qu'est une méthode statique en python et pourquoi elle n'a pas besoin du 'self' ?, J'ai essayé votre code et cela fonctionne même sans @staticmethod, pourquoi? Désolé pour le nombre de questions mais j'ai beaucoup de mal à comprendre comment fonctionne l'argument 'self' – akerbeltz

+1

@akerbeltz :) ** staticmethods ** sont des méthodes qui sont liées à une classe plutôt qu'à son objet. Ils n'ont pas besoin d'instance de classe '@ staticmethod' dit que nous utilisons' staticmethod'. Dans les versions antérieures, la syntaxe pour écrire ** staticmethod ** était différente. Vous pouvez juste google pour plus d'informations – ksai

+0

self est un équivalent de, pour 'cet' objet. staticmethod n'est pas pour différentes instances, il est lié à une classe. – gout