我正在尝试将一些javascript代码重写为Python。这带来了一些问题,因为我对python很陌生,但我认为这是一个很好的练习。
无论如何,手头的问题是我需要在其他地方定义的对象中使用动态方法...(我知道这听起来如何,但是请耐心等待一段时间)
基本上有一个Tile对象可以是几种类型的tile,但是不是将这些类型扩展为主要的Tile对象,而是选择将功能放入一种数组中,
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到类或某种东西的某种映射,但我很好奇是否有可能使它像那样)
答案 0 :(得分: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())
答案 1 :(得分: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]
答案 2 :(得分:0)
class Foo: pass
def methodfunc(self, param): pass
Foo.mymethod = methodfunc
foo = Foo()
foo.mymethod(None)
上述方法可行,但仅限于修补类后创建实例的位置。