Seite 1 von 1

module is not callable

Verfasst: Freitag 27. November 2009, 15:34
von Queztapotel
Hi,

Zuerst, ich hab das forum durchsucht und nichts gefunden
hier Fehlermeldung:

Code: Alles auswählen

C:\Python25\Pong>main.py
Traceback (most recent call last):
  File "C:\Python25\Pong\Main.py", line 54, in <module>
    main()
  File "C:\Python25\Pong\Main.py", line 21, in main
    ball = Ball(screen)
TypeError: 'module' object is not callable
hier mein Code:

Code: Alles auswählen

# -*- coding: UTF-8 -*-
import os, sys
import pygame
import Ball
import Leftplayer
import Rightplayer
from pygame.locals import *
from pygame.rect import *


def main():
#initalize
    pygame.init()
    screen = pygame.display.set_mode((800,600))
    pygame.display.set_caption("Pong")
    pygame.mouse.set_visible(1)
    pygame.key.set_repeat(1, 30)
    white = (255,255,255)
    width = 5
    #Create ball/players
    ball = Ball(screen)
    rightplayer = Rightplayer(screen)
    leftplayer = Leftplayer(screen)
    
    
    #show longer than one frame
    clock = pygame.time.Clock()
    
    running = 1
    while running:
        clock.tick(30)
        screen.fill((0, 0, 0))

        #Draw the playarea
        playarea = pygame.draw.polygon(screen, white, [(10, 10), (790, 10), (790, 590), (10, 590)], 5 )
        middlline = pygame.draw.line(screen, white, (400,10), (400,590), width)
        middlline.inflate_ip(width,20)
        ball.draw()
        
        
        
        for event in pygame.event.get():
            if event.type == QUIT:
                running = 0

            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))

        pygame.display.flip()

    
if __name__ == '__main__':
    main()


Ball.py
#Ball
import os, sys
import Main
import pygame

class Ball:
  def __init__(self,surface):
    self.surface = surface
    self.white = (255,255,255)
    self.bwidth = 3
    self.radius = 7
    
    def draw(self):
      pygame.draw.circle(surface, self.white, (400,250), self.radius, self.bwidth)
    
    #def moveball(self):
      #kommt noch
  

Leftplayer.py

#player left
import os, sys
import pygame
class Leftplayer:
  def __init__(self,surface):
    self.surface = surface
    self.width = 6
       
  def draw(self):
    leftplayer = pygame.draw.line(screen, white, (150,25), (250,25), width)
    leftplayer.inflate_ip(width,20)

Rightplayer.py

#player right
import os, sys
import pygame
class Rightplayer:
  def __init__(self,surface):
    self.surface = surface 
    self.width = 6

  def draw(self):
    rightplayer = pygame.draw.line(screen, white, (150,775), (250,775), width)
    rightplayer.inflate_ip(width,20)
Wäre seehr dankbar wenn ihr mir helfen könnten

Re: module is not callable

Verfasst: Freitag 27. November 2009, 15:53
von numerix
Deutlicher kann eine Fehlermeldung doch nicht sein:
In Zeile 21 versuchst du, ein Modul (nämlich Ball, was du zuvor importiert hast) auszuführen. Das geht natürlich nicht ...

Verfasst: Freitag 27. November 2009, 16:00
von Queztapotel
auch wenn ich danach Nr 1 Depp im Forum bin, die antwort hilft mir nicht weiter. :<

Verfasst: Freitag 27. November 2009, 16:08
von numerix
Queztapotel hat geschrieben:auch wenn ich danach Nr 1 Depp im Forum bin
Dafür reicht das noch nicht ...

In Zeile 4 steht

Code: Alles auswählen

import Ball
Du importierst also ein Modul namens Ball.

In Zeile 21 steht

Code: Alles auswählen

ball = Ball(screen)
Das sieht aus, als würde eine Instanz einer Klasse Ball erzeugt (evtl. ist es auch das, was du vorhast), aber in Wahrheit wird hier das Modul Ball mit dem Argument screen aufgerufen - das funktioniert eben nicht.

Verfasst: Freitag 27. November 2009, 16:08
von ms4py
Zuerst einmal: Module sollte man immer kleinschreiben.

Du solltest dich auf jeden Fall noch einmal mit den Grundlagen auseinander setzen, vor allem die Zusammenhänge Modul, Paket
Im Tutorial unter
http://docs.python.org/tutorial/modules.html

Unter der Voraussetzung, dass dein Modul jetzt kleingeschrieben ist, funktioniert dann folgendes

Code: Alles auswählen

#entweder
from ball import Ball
ball = Ball(screen)
#oder
import ball
ball = ball.Ball(screen)
Für jede Klasse eine Datei bzw. Modul wie in C++/Java ist in Python außerdem nicht üblich, du solltest deine Paketstruktur sowieso noch überarbeiten, dann ist dieses Problem eh irrelevant.

Verfasst: Freitag 27. November 2009, 16:26
von Queztapotel
arrr, jetzt habe ich extra wegen nem anderem tutorial alles gross umgeschrieben^^ - naja, was solls.

Danke viel mal für die Hilfe es funktioniert :D

Verfasst: Freitag 27. November 2009, 16:28
von gkuhl
Was das denn für ein Tutorial?

Verfasst: Freitag 27. November 2009, 16:40
von numerix
Queztapotel hat geschrieben:arrr, jetzt habe ich extra wegen nem anderem tutorial alles gross umgeschrieben^^ - naja, was solls.
Bei den Klassennamen ist das ja auch richtig. Aber die Modulnamen solltest du klein schreiben (dann wäre dir der Fehler oben evtl. auch gar nicht unterlaufen).

Re: module is not callable

Verfasst: Donnerstag 29. Oktober 2020, 23:31
von HeinzBacker
Hi ,

ich habe das Problem auch , aber nicht wegen fehlerhaftem Import.
Für mich scheint alles zu passen:

Code: Alles auswählen

from example_obj import exampleObj


def execute_my_obj(**kwargs):
    my_obj = exampleObj(kwargs)
    my_obj.do_something()

if __name__ == '__main__':
    kwargs = dict(sys.argv[:]])
    execute_my_obj(**kwargs)
    

pyLint sagt:
E1102: exampleObj is not callable (not-callable)

Kann jemand helfen?

Re: module is not callable

Verfasst: Freitag 30. Oktober 2020, 00:15
von __blackjack__
@HeinzBacker: Und was passiert wenn Du das ausführst?

Also äh, nachdem Du den Fehler behoben hast der vorher auftritt natürlich. Obwohl das ja eigentlich zwei sind. Müssen beide behoben werden.

Du könntest dann auch gleich noch die Namensschreibweise an die Python-Konventionen anpassen. Und dieses unsinnige `my_` weg lassen.

Re: module is not callable

Verfasst: Freitag 30. Oktober 2020, 10:12
von HeinzBacker
es läuft ganz normal ohne Probleme.

Ist ja "nur" ein Lint Fehler - aber den will ich auch weghaben.
__blackjack__ hat geschrieben: Freitag 30. Oktober 2020, 00:15 Du könntest dann auch gleich noch die Namensschreibweise an die Python-Konventionen anpassen. Und dieses unsinnige `my_` weg lassen.
das ist kein Produktiv-Code, sonder nur hier für das Forum so umgeschrieben.

Re: module is not callable

Verfasst: Sonntag 1. November 2020, 23:29
von HeinzBacker
keine ne Idee?

Stimmt dann die Pylint Meldung?

Re: module is not callable

Verfasst: Montag 2. November 2020, 11:54
von __blackjack__
@HeinzBacker: Woher sollen wir das wissen? Glaskugel ist gerade in Reparatur. 🙂

Re: module is not callable

Verfasst: Dienstag 3. November 2020, 16:59
von HeinzBacker
die scheint dauernd in Reparatur zu sein.

Re: module is not callable

Verfasst: Donnerstag 5. November 2020, 22:06
von /me
HeinzBacker hat geschrieben: Dienstag 3. November 2020, 16:59 die scheint dauernd in Reparatur zu sein.
Du könntest alternativ auch zeigen, wie der Code von example_obj aussieht, insbesondere was exampleObj dort eigentlich ist. Dann könnten wir auch ohne Glaskugel arbeiten.