【发布时间】:2013-02-14 20:21:48
【问题描述】:
问题
在同一个类中,如何从方法中访问函数?
背景
世界你好!我目前正在使用 Tkinter 开发一个 GUI IM 程序。要通过套接字发送消息,我需要从方法访问函数。我的self.network 方法有一个我想访问的函数send_message()。
代码
要访问它,我尝试使用此代码:
def messageFun(self):
//Other widgets are here//
self.send = Button (self.messageFrame, text = "Send",
command = self.network(send_message()))
self.send.grid(row = 1, column = 1, sticky = S)
self.network方法和send_message函数如下:
def network(self):
def send_message():
#Send some data to the remote server
message = self.message.get("0.0",END)
try:
#set the whole string
s.sendall(message)
except socket.error:
#Send Failed
print "Send failed"
sys.exit()
尽管我努力调试代码,但我总是得到以下消息的回报:
Traceback (most recent call last):
File "D:\Python Programs\Sockets\First Project\IM Project\Server GUI InDev.py", line 178, in <module>
app = Application(root)
File "D:\Python Programs\Sockets\First Project\IM Project\Server GUI InDev.py", line 73, in __init__
self.messageFun()
File "D:\Python Programs\Sockets\First Project\IM Project\Server GUI InDev.py", line 156, in messageFun
command = self.network(send_message()))
NameError: global name 'send_message' is not defined
【问题讨论】:
-
你好。我已经更新了我的答案。但是,我认为您遇到了 XY 问题,因为在我看来,您试图以一种不清楚的方式做某事,并且我看到您的用户页面,其中您说 “我刚开始编程"。为什么你认为把一个函数放在一个方法中会给你发送消息的方法?我觉得你们班的概念不好。但是我们看不到您的课程,只有您向我们提出的 Y 问题
-
第 XY 问题 (meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。在 (mywiki.wooledge.org/XyProblem) 中,我们读到 “有时被称为 XY 问题是一种心理障碍,会导致人们浪费大量时间和精力,无论是在寻求帮助的人,还是在提供帮助的那部分人。”
-
正如@eyquem 在他的回答中提到并解释的那样,方法中的函数是一种错误的做法。我不确定为什么 Python 甚至允许这样做。仅提取该函数并将其编写为方法然后在您想要的类中的任何位置访问它有什么问题?
标签: python oop sockets tkinter