'module' object is not callable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

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()

EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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 ;-)
Das Leben ist wie ein Tennisball.
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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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...?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten