2016-11-30 4 views
-1

Ich habe eine Funktion, die eine Klasse zurückgeben und ich es als ein Objekt speichern. Wenn ich versuche, auf einer Klassenmethode aufrufen werde ich den FehlerTypeError: 'int' Objekt ist nicht aufrufbar beim Aufruf einer Klassenfunktion

location = file_type.route(env['REQUEST_URI']) # Get the location 
TypeError: 'int' object is not callable 

I Name auf das Objekt geändert haben, um sicherzustellen, dass es keine Namens Kollision ist.

In der ersten Zeile rufe ich die Methode get_file_type in der Modulroute auf.

file_type = route.get_file_type(env['REQUEST_URI']) # Get File_type object 
location = file_type.route(env['REQUEST_URI']) # Get the location 

Wenn ich die file_type auszudrucken ich Ausgang <route.File_type instance at 0x7f96e3e90950>

ich die FILE_TYPE Klassen in einem Wörterbuch speichern und das Verfahren get_file_type eine FILE_TYPE liefert basierend auf der Anforderung.

path = {'html' : File_type('html', 1, 1), 
     'css' : File_type('css', 1, 0), 
     'ttf' : File_type('ttf', 0, 0), 
     } 

def get_file_type(request): # return a File_type object 
    extension = request.rsplit('.', 1)[-1] 

    if extension in path: 
     return path[extension] 

    return path['html'] 

FILE_TYPE Klasse

class File_type: 

    def __init__(self, type_, parse, route): 
     self.type_ = type_ 
     self.parse = parse 
     self.route = route 

    def route(resource): 
     if self.route == 1: 
      for pattern, value in routes: 
       if re.search(pattern, resource): 
        return value 
      return None 
     else: 
      return resource.rsplit('.', 1)[0][1:] 
+2

Bitte geben Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) an. Sie haben nicht einmal angezeigt, in welcher Zeile der Fehler auftritt, und auch nicht unbedingt den Code, der den Fehler verursacht. Lesen Sie diese Seite und bearbeiten Sie Ihren Post entsprechend. –

+2

Wenn Sie einen 'File_type' initialisieren, überschreibt das Attribut' route' die Funktion 'route', so dass Sie sie nicht aufrufen können. Gib ihnen verschiedene Namen –

+0

@PatrickHaugh Danke das Problem gelöst – Olof

Antwort

0

In Ihrem File_type Klasse haben Sie route als Methode. Aber wenn Sie Konstruktor aufrufen, schreiben Sie self.route (das war eine Methode) eine ganze Zahl, so dass Sie Ihre Methode verlieren und sie nicht mehr aufrufen können. Stattdessen versuchen Sie, Ganzzahl aufzurufen. Ändern Sie einfach den Namen der Methode oder Variable route.

Und zw. Methode muss immer self als Parameter erhalten (Ihre route Methode nicht).

Verwandte Themen