2014-07-22 13 views
11

Lassen Sie mich damit beginnen, dass ich so grün bin wie es geht, wenn es um Programmierung geht, aber Prozess gemacht habe. Mein Verstand muss jedoch immer noch vollständig verstehen, warum und was passiert.Fehlendes 1 benötigtes Positionsargument

Wie auch immer der Titel anspricht, ich werde den Quellcode einfügen, den ich auf ein Minimum beschränken werde.

(ich verwende 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"); 

werde ich hier den Fehlercode einfügen:


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

Ich verstehe, dass Ich brauche d, um die Fehler zu überprüfen und sorgfältig zu lesen, was es sagt, sowie eine Suche vor einem Beitrag zu tun, mit dem getan und das Problem nicht zu lösen, komme ich hier, um es zu posten ...

Von hier aus können Sie lesen, wenn Sie sind daran interessiert zu wissen, was ich denke, in meinem Kopf geht:

der Fehler sagt mir, dass ich ein weiteres Argument im Namen brauchen, also muss ich da falsch gehen, aber ich habe bereits versucht, so etwas wie dieses:

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

Haben Sie mehr Argumente im Namen? Wenn ich richtig verstehe, ist ein Argument in diesem ->() < -

Ich schließe auch die Tatsache aus, dass es der def createname (Selbst, Name) wäre, weil Selbst ist oder sollte allein sein und nicht enthalten ? Also verstehe ich nicht wirklich, was vor sich geht.

Vielen Dank im Voraus und Entschuldigung, wenn dies bereits beantwortet wurde, in diesem Fall muss ich es übersehen haben.


GELöST:

first = classname; 
second = classname; 

werden soll:

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

Die Klammern, wo fehlendes was natürlich bedeutet, dass ich nur erste und zweite EQUAL zu etwas gemacht anderem und nicht verknüpft es mit der "tatsächliche cl

+1

Sorry zu sagen, aber in Python das Semikolon (";") wird nie am Ende einer Zeile verwendet ... (Es gibt Ausnahme, aber das sind auch schlechte Übung) – adho12

Antwort

5

Dies ist eine sehr einfache Antwort, überrascht, dass Sie nie eine Antwort bekommen! :(

Sie haben nicht tatsächlich erstellt ein Objekt noch.

Zum Beispiel würden Sie schreiben:

first = classname() 

statt nur

first = classname 

Im Moment, wie Sie es geschrieben, first zeigt auf eine Klasse. Z.B.wenn Sie fragen, was first ist, würden Sie erhalten:

<class '__main__.classname'> 

jedoch, nachdem es instanziieren (indem er einfach die () am Ende hinzufügen), dann würden Sie sehen, dass first jetzt:

<__main__.classname object at 0x101cfa3c8> 
hier

Der wichtige Unterschied ist, dass Ihr Aufruf erstellt eine Klasse, während mine Objekt erstellt.

Eine Klasse ist für einen Gegenstand, wie der Mensch für Sie ist, oder wie ein Hund für Lassie ist.

Sie haben "canine" erstellt, während Sie "Lassie" erstellen wollten.


Hinweis: Sie möchten normalerweise auch Ihre Objekte initialisieren. Dafür platzieren Sie eine __init__ Methode in Ihrer Klasse.

+1

Danke dafür, neu zu Python auch und das half mir bei der Reparatur eines 2-Uhr-Gehirns, das nicht funktionierte, und das hätte mich viel länger gebraucht, um etwas anderes zu erkennen – ShaneOH

Verwandte Themen