2012-03-14 11 views
0

私はいくつかのJavaScriptコードをPythonに書き直そうとしています。それは私がPythonにはかなり新しいので、いくつかの問題をもたらしますが、それは私が推測する良い教訓です。Pythonの動的メソッド

とにかく、当面の問題は、私はどこか別の場所に定義されているオブジェクトの動的メソッドを必要とするということです...(私はこれがどのように聞こえるかを知っているが、秒間私と一緒にクマ)

Basiclyありタイルのいくつかのタイプであってもよいが、代わりに、これらの型の範囲を作るのメインタイルは、選択は、配列のソートに機能を配置するためになされたもので、オブジェクトことができますタイルオブジェクト、

tileTypes = { 
    1: { 
     color: red, 
     func: dynamic_function(){ 
      //code here 
     } 
    }, 
    2: { 
     color: green, 
     func: dynamic_function(){ 
      //other code here 
     } 
    }, 
} 

var Tile = function(type) 
{ 
    this.color = tileTypes[type].color 
    this.func = tileTypes[type].func 
} 

(実際の生活のコードはかなりありますこれよりも大きいが、例としてその目的を果たす)

私はこれが最善のコードではないことを知っています(これは本当に奇妙なことを感じています)が、それは非常に動的であり、新しいタイプは非常に速く追加できるので、私はそれを許します。

しかし、これをPythonで構築する方法はわかりません。

注:実際には使用しないで、代わりに、タイプIDからクラスなどのマッピングを使用しますが、そのようにすることが可能かどうかは非常に興味があります)

答えて

1

は、これはあなたが始める必要があります。

def tile1Func(): 
    return "tile 1" 

def tile2Func(): 
    return "tile 2" 

tileTypes = { 
    1: { 
     "color": "red", 
     "func": tile1Func 
    }, 
    2: { 
     "color": "green", 
     "func": tile2Func 
    } 
} 

class tile(): 
    def __init__(self, type): 
     self.color = tileTypes[type]["color"] 
     self.func = tileTypes[type]["func"] 

t1 = tile(1) 
print("color: " + t1.color + ", name: " + t1.func()) 
+0

恥をdictonairy内の実際の関数を定義する方法はありません...まあ、私はこれが一番近い来ないと思います:) – Johan

0
class Foo: pass 

def methodfunc(self, param): pass 

Foo.mymethod = methodfunc 

foo = Foo() 
foo.mymethod(None) 

上記は動作しますが、クラスがパッチされた後にインスタンスが作成される場所のみが動作します。

1
class TileType(object): 
    def __init__(self, color, func): 
     self.color = color 
     self.func = func 

tile_types = { 
    1: TileType('red', some_func), 
    2: TileType('green', some_other_func), 
} 

type = 1 
tile = tile_types[type] 
関連する問題