Python动态方法

时间:2012-03-14 14:11:14

标签: javascript python

我正在尝试将一些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到类或某种东西的某种映射,但我很好奇是否有可能使它像那样)

3 个答案:

答案 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)

上述方法可行,但仅限于修补类后创建实例的位置。