使用类内函数的Pythonic切换
我试图使用dict从类中控制函数选择,但是,我得到以下类型错误:使用类内函数的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
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)
都可以工作。