Seite 1 von 1
'module' object is not callable
Verfasst: Mittwoch 29. September 2010, 14:29
von Friedericus
Servus leuts
hier mal ein wenig code:
Code: Alles auswählen
class testklasse (object):
a = 1000
print a
def __init__(self, a):
self.a = a
print a
def aendern (self):
a = 500
def ausgeben (self):
print a
hier findet er in der funktion 'ausgeben' kein a. Warum erkennt er das nicht?
so, jetzt soll in einem Anderen Modul testklasse initialisiert werden, und anschließend mit 'ausgeben' ausgegeben werden, was er jedoch mit "'module' object is not callable" kommentiert.
Wo liegt mein Fehler?
Re: 'module' object is not callable
Verfasst: Mittwoch 29. September 2010, 14:38
von EyDu
Hallo.
Er findet a nicht, weil a ein lokaler Name ist. Was du meinst ist "self.a". Dein "a = 1000" ist übrigens überflüssig und wahrscheinlich hier sogar falsch. Damit bindest du "a" nämlich an "testklasse" und nicht an Exemplare von "testklasse".
Dein zweites Problem: In deinem Modul "testklasse" liegt die Klasse "testklasse". Also benötigst du:
Code: Alles auswählen
import testklasse
t = testklasse.testklasse(5)
t.ausgeben()
Warum du ein Modul "testklasse" nennst ist mir allerdings rätselhaft

Re: 'module' object is not callable
Verfasst: Mittwoch 29. September 2010, 14:41
von BlackJack
@Friedericus: Dein Fehler liegt, wie die Meldung schon sagt, dass Du versuchst das Modul aufzurufen. Du hast da ein Modul mit dem Namen `testklasse` in dem sich eine Klasse mit dem Namen `testklasse` befindet. Bei einem ``import testklasse`` bindest Du das Modul `testklasse` an eben diesen Namen. Du musst entweder auf das Klassenobjekt zugreifen oder Dir mit einem ``from``-Import explizit die Klasse in den Namensraum holen. Also ``t = testklasse.testklasse(5)`` oder ``from testklasse import testklasse``.
Bei den Methoden wirst Du dann aber Überraschungen erleben. `aendern()` ändert nicht wirklich etwas weil die Zuweisung an das lokale `a` nach aussen keinen Effekt hat, und bei `ausgeben()` wirst Du einen `NameError` bekommen, weil da lokal gar kein `a` definiert ist, welches man ausgeben könnte.
Die Namenkonvention für Klassen ist übrigens `MixedCase`, also `Testklasse` in diesem Fall. Dann könnte man Modul und Klasse auch einfacher auseinander halten.
Re: 'module' object is not callable
Verfasst: Mittwoch 29. September 2010, 14:57
von Rebecca
Hier definierst du dir uebrigens eine Klassenvariable. Danach dann eine Instanzvariable mit dem gleichen Namen:
Das ist wahrscheinlich nicht das, was du moechtest...?