web-dev-qa-db-fra.com

Manquant 1 argument positionnel requis

permettez-moi de commencer par le fait que je suis aussi vert que possible en ce qui concerne la programmation, mais que je fais du processus. Mon esprit doit cependant encore comprendre pleinement pourquoi et ce qui se passe.

Quoi qu'il en soit, comme le suggère le titre, je vais coller le code source que je garderai au minimum.

(J'utilise Python Version 3.4.1)


class classname:
    def  createname(self, name):
        self.name = name;
    def displayname(self):
        return self.name;
    def saying(self):
        print("Hello %s" % self.name);

first = classname;
second = classname;

first.createname("Bobby");

Je vais coller ici le code d'erreur:


Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
first.createname("Bobby")
TypeError: createname() missing 1 required positional argument: 'name'

Je comprends que je dois vérifier les erreurs et lire attentivement ce qu'il dit ainsi que faire une recherche avant un message, avec cela fait et à défaut de résoudre le problème, je viens ici pour le poster ...

À partir d'ici, vous pouvez lire si vous êtes intéressé par ce que je pense se passe dans mon esprit:

L'erreur me dit que j'ai besoin d'un argument supplémentaire dans le nom, donc je dois me tromper là-bas, mais j'ai déjà essayé quelque chose comme ceci:

first.createname("bobby", "timmy");

Vous avez plus d'arguments dans le nom? Si je comprends bien, un argument est dans ce -> () <-

J'exclus également le fait que ce serait le nom du créateur def (self, name), parce que self est ou devrait être seul et non inclus? Je ne comprends donc pas vraiment ce qui se passe.

Merci d'avance et désolé si cela a déjà été répondu, auquel cas je dois l'avoir ignoré.


RESOLU:

 first = classname;
 second = classname;

Devrait être:

 first = classname();
 second = classname();

Les parenthèses sont manquantes, ce qui signifie bien sûr que je viens de faire le premier et le deuxième égal à autre chose et de ne pas le lier avec le "cl

11
XallZall

C'est une réponse très simple, surpris de ne pas avoir de réponse! :(

Vous n'avez pas encore créé d'objet .

Par exemple, vous voudriez écrire:

first = classname()

au lieu de juste

first = classname

À l'heure actuelle, comment vous l'avez écrit, first pointe vers un classe. Par exemple, si vous demandez ce qu'est first, vous obtiendrez:

<class '__main__.classname'>

Cependant, après l'instanciation (en ajoutant simplement le () à la fin), vous verriez que first est maintenant:

<__main__.classname object at 0x101cfa3c8>

La distinction importante ici est que votre appel a créé une classe , tandis que le mien a créé un objet .

Une classe est à un objet comme l'humanité est à vous, ou comme canine à Lassie.

Vous avez créé "canine", alors que vous vouliez créer "Lassie".


Remarque: vous souhaitez également généralement initialiser vos objets. Pour cela, vous placez un __init__ méthode dans votre classe.

6
Mike Williamson