方法入口点在类变量中

deS*_*gis 0 python python-2.x

如何作为类变量安装包含方法入口点的表?

为了澄清,请考虑以下工作代码:

class A(object):

    def go(self, n):
        method = self.table[n]
        method(self)

    def add(self):
        print "add"

    def multiply(self):
        print "multiply"

    table = {
        1: add,
        2: multiply,
        }

>>> q = A()
>>> q.go(1)
add
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢它.我想在开头提供表格以便于阅读(真实世界的项目要大得多),我不喜欢使用它method(self).我认为这很令人困惑.

我的问题是:有更好的方法还是上面的代码点?

谢谢.

Cat*_*lus 6

它已经包含一个.它被称为__dict__.

class foo(object):
    def go(self, method):
        getattr(self, method)()

    def a(self):
        ...

    def b(self):
        ...
Run Code Online (Sandbox Code Playgroud)

如果你真的想要数字索引,你可以做例如

class foo(object):
    methods = { 1: 'a', 2: 'b' }
    def go(self, n):
        getattr(self, self.methods[n])()
Run Code Online (Sandbox Code Playgroud)

但这只是愚蠢的,特别是字符串被实习并使用魔术整数代替它们并没有给你带来太大的收获,除了默默无闻.