使用类内函数的Pythonic切换

使用类内函数的Pythonic切换,python,class,switch-statement,Python,Class,Switch Statement,我试图使用dict从类中控制函数选择,但是,我得到以下类型错误: TypeError: A() missing 1 required positional argument: 'self' 示例代码: class Tt: def __init__(self): pass def A(self): print("a") def B(self): print("b") def C(self): prin

我试图使用dict从类中控制函数选择,但是,我得到以下类型错误:

TypeError: A() missing 1 required positional argument: 'self'
示例代码:

class Tt:
    def __init__(self):
        pass
    def A(self):
        print("a")
    def B(self):
        print("b")
    def C(self):
        print("c")

    a_diction={
         '0' : A,
         '1' : B,
         '2' : C
    }

    def ad(self,data):
        self.a_diction[data]()

我应该如何在
ad
中构造此开关以向
a
和被调用的方法
a
B
C
提供
self

错误消息表明缺少参数。我建议增加一个论点

self.a_diction[data](self)

错误消息表明缺少参数。我建议增加一个论点

self.a_diction[data](self)

你能改为做以下事情吗

class Tt:
    def __init__(self):
        self.a_diction = {
             0: self.A,
             1: self.B,
             2: self.C
        }

    def A(self):
        print("a")

    def B(self):
        print("b")

    def C(self):
        print("c")

    def ad(self,data):
        self.a_diction[data]()

也就是说,将
一个单词
作为一个实例属性,并在
中初始化它?然后,您可以选择绑定方法作为字典中的值,而不是未绑定方法。

您可以改为执行以下操作吗

class Tt:
    def __init__(self):
        self.a_diction = {
             0: self.A,
             1: self.B,
             2: self.C
        }

    def A(self):
        print("a")

    def B(self):
        print("b")

    def C(self):
        print("c")

    def ad(self,data):
        self.a_diction[data]()

也就是说,将
一个单词
作为一个实例属性,并在
中初始化它?然后,您可以选择绑定方法作为字典中的值,而不是未绑定方法。

是的,这很有效。。。。但是为什么它会起作用呢?从逻辑上讲,它应该是self。。我知道这是错的。。但是在这里,把自我作为论点来传递是有效的。。为什么会这样?@user3007395您能在问题中发布您的实际代码吗?即使添加了此项,现有的代码也无法工作。它工作的原因是
someObject.method()
也可以使用语法
someClass.method(someObject)
调用。类似地,
self.thing()
thing(self)
两者都起作用。是的,这起作用。。。。但是为什么它会起作用呢?从逻辑上讲,它应该是self。。我知道这是错的。。但是在这里,把自我作为论点来传递是有效的。。为什么会这样?@user3007395您能在问题中发布您的实际代码吗?即使添加了此项,现有的代码也无法工作。它工作的原因是
someObject.method()
也可以使用语法
someClass.method(someObject)
调用。类似地,
self.thing()
thing(self)
都可以工作。