对动态方法感到困惑

时间:2014-12-04 14:36:10

标签: python dynamic

我试图了解如何创建具有方法的对象,这些方法由字符串列表定义。我不知道,这是怎么称呼的,所以我现在很难找到搜索。我正在研究闭包,看看装饰器和描述符,现在我很困惑。

我能够将我的问题归结为下面的~20行代码。所以我定义了这个Dyn类,最终会根据__init__调用中给出的名称来设置方法。它有效,但由于某些原因,这些方法都是做同样的

import types

class Dyn(object):

    def __init__(self, things=['foo', 'bar', 'baz']):
        for t in things:
            def method(self, number):
                print number*t
            setattr(self, t, types.MethodType(method, self))

当我尝试这个时,例如像这样:

first = Dyn()
first.foo(3)
first.bar(1)

结果是:

bazbazbaz
baz

而不是:

foofoofoo
bar

正如我所料。

任何人都可以向我推进正确的方向吗?

0 个答案:

没有答案