Getattr on self 不工作,它应该工作吗?
Getattr on self not working, is it supposed to work?
我在一个对象中有这个非常简单的函数:
def ctrl_btn_press(self, event):
print event.GetEventObject().GetName()
getattr(self, event.GetEventObject().GetName())
事件是一个wxpython事件。这些名称在配置文件的列表中,我的 gui 中的按钮设置为将处理该按钮按下的事件处理程序对象中的函数名称。
打印有效,它会打印,例如 "alm_switch_away"。但是,函数调用 getattr 不起作用。这是它应该调用的函数(带有打印函数来测试代码是否为 "got there")但没有打印任何内容:
def alm_switch_away(self):
print "HERE!"
你能看出我做错了什么吗?
如果 不起作用 你的意思是 我得到的是 AttributeError
而不是 ,那么你需要查看 字符串表示 输出以发现事件名称中的任何不可打印字符:
print repr(event.GetEventObject().GetName())
如果您的意思是实际上什么都没有发生,那是因为您从来没有用您查找的方法做任何事情。您没有调用 方法。在 getattr()
调用后添加 ()
:
event_method = getattr(self, event.GetEventObject().GetName())
event_method()
或合为一行:
getattr(self, event.GetEventObject().GetName())()
我在一个对象中有这个非常简单的函数:
def ctrl_btn_press(self, event):
print event.GetEventObject().GetName()
getattr(self, event.GetEventObject().GetName())
事件是一个wxpython事件。这些名称在配置文件的列表中,我的 gui 中的按钮设置为将处理该按钮按下的事件处理程序对象中的函数名称。
打印有效,它会打印,例如 "alm_switch_away"。但是,函数调用 getattr 不起作用。这是它应该调用的函数(带有打印函数来测试代码是否为 "got there")但没有打印任何内容:
def alm_switch_away(self):
print "HERE!"
你能看出我做错了什么吗?
如果 不起作用 你的意思是 我得到的是 AttributeError
而不是 ,那么你需要查看 字符串表示 输出以发现事件名称中的任何不可打印字符:
print repr(event.GetEventObject().GetName())
如果您的意思是实际上什么都没有发生,那是因为您从来没有用您查找的方法做任何事情。您没有调用 方法。在 getattr()
调用后添加 ()
:
event_method = getattr(self, event.GetEventObject().GetName())
event_method()
或合为一行:
getattr(self, event.GetEventObject().GetName())()