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?

Code: Alles auswählen

import testklasse

t = testklasse(5)
t.ausgeben()


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

Code: Alles auswählen

class testklasse (object):
    a = 1000
Hier definierst du dir uebrigens eine Klassenvariable. Danach dann eine Instanzvariable mit dem gleichen Namen:

Code: Alles auswählen

    def __init__(self, a):
        self.a = a
        print a
Das ist wahrscheinlich nicht das, was du moechtest...?