2016-11-30 11 views
-1

クラスを返す関数があり、オブジェクトとして保存しています。私はクラスのメソッドを呼び出すしようとすると私はそれが何の命名衝突されていないことを確認するために、オブジェクトに名前を変更したエラーTypeError:クラス関数を呼び出すときに 'int'オブジェクトを呼び出しできません

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

を取得します。

最初の行では、モジュールルートのget_file_typeメソッドを呼び出します。

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

私は出力<route.File_type instance at 0x7f96e3e90950>

を得るFILE_TYPEをプリントアウトした場合、私は辞書や要求に基づいてFILE_TYPEを返すget_file_type方法でFILE_TYPEクラスを格納します。あなたのFile_typeクラスで

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クラス

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

[最小限で完全であり、検証可能な例](http://stackoverflow.com/help/mcve)を提供してください。エラーが発生している行を表示していないし、エラーを生成するコードを必ずしも提供していない場合もあります。そのページを読み、それに応じてあなたの投稿を編集してください。 –

+2

'File_type'を初期化すると、' route'属性は関数 'route'を上書きしていますので、呼び出すことはできません。彼らに別の名前をつける –

+0

@PatrickHaughおかげで問題は解決した – Olof

答えて

0

あなたはメソッドとしてrouteを持っています。しかし、コンストラクタを呼び出すと、self.route(メソッドであった)の整数に書き込まれるため、メソッドが緩んでしまい、もはや呼び出すことができません。代わりに、integerを呼び出そうとします。したがって、メソッドまたは変数の名前を変更するだけです。route

およびbtw。メソッドは常にパラメータとしてselfを取得する必要があります(routeメソッドではありません)。

関連する問題