2012-10-26 5 views
7

ich eine Methode in einer Klasse in einem Modul MOD1 erstellen und Aufruf wie folgt:Ein Angebot Attribute: <class> hat kein Attribut <method>

class blahblah: 
    def foobar(self, bvar, **dvar) 
     //// 
     return dvar 

Und nannte es als:

obj1 = mod1.blahblah() 
dvar1 = obj1.foobar(True, **somedictionary) 

Es wirft ein Attribute error: blahblah has no attribute named foobar

Könnten Sie bitte mir dabei helfen? Vielen Dank im Voraus

+1

Sie haben den Code, den Sie tatsächlich verwenden, aus welchen Gründen auch immer nicht veröffentlicht. Das ist gut. Aber basierend auf Ihrem Beitrag ist nichts falsch. Bist du dir sicher, dass es keinen Tippfehler in deinem echten Code gibt (vielleicht hast du versehentlich 'foobar' als' fubar' geschrieben, usw.)? – inspectorG4dget

+0

Nein. Ich habe das überprüft und es war kein Tippfehler. Der eigentliche Code wurde nicht veröffentlicht, da es sich um ein Sicherheitsprogramm handelt. – user1778309

+1

Dieser Fehler kann nur auftreten, wenn 'foobar' keine in' blahblah' definierte Methode ist. Da Sie feststellen, dass es als solches definiert ist, sollten Sie diesen Fehler nicht sehen. Bist du sicher, dass 'foobar' in 'blahblah' in deinem echten Code definiert ist? – inspectorG4dget

Antwort

18

Die Art von Fehler, die Sie beschreiben, kann einfach durch nicht übereinstimmende Einrückung verursacht werden. Wenn die Methode ganz unten in Ihrer Klasse ist, verschieben Sie sie etwas in der Klasse und das Problem wird offensichtlich.

Wenn Python-Interpreter in nicht übereinstimmende Einzüge geraten (wie Sie sagen, dass Sie Tabs am Ende einer Datei, die mit Leerzeichen eingerückt wurde, verwenden), wird der Interpreter nicht immer einen Fehler werfen; Es kann einfach den Rest der Datei ignorieren. Ich habe das gerade heute erfahren, als ich einen alten Code aktualisiert habe, bei dem der ursprüngliche Autor verschiedene Whitespaces verwendet hat (das passierte mit meinen Geany-Tabs), und das hat mich eine ganze Weile länger geschleift, als ich zugeben möchte. :)

+0

Danke, das war hilfreich. Ich hatte das gleiche Problem In der Datei wurde eine Mischung aus Tabulatoren und Leerzeichen verwendet, um eine Einrückung in der Datei zu ermöglichen.Ich habe eine Reihe von Erklärungen ohne Auflösung durchgelesen, bevor Sie Ihre Antwort gefunden haben – tompark

+1

Für was es sich lohnt, kann es auch passieren, wenn% Autoreload verwendet wird magic-Befehl in jupyter notebook, wenn Sie einige Methoden in Ihrem Modulcode ändern (https://ipython.org/ipython-doc/3/config/extensions/autoreload.html#caveats) – Jacquot

0

Ich hatte das gleiche Problem, und für mich passiert es, wenn ich die Klassendatei verschoben, aber ich habe eine .pyo-Datei im alten Ordner, und Python liest immer noch diese .pyo-Datei statt das Verschieben zu lesen .py-Datei.

Verwandte Themen