为什么变量不会传递给新类

时间:2014-02-11 19:23:46

标签: python python-3.x

您在下面找到的代码已缩短,因此您无需阅读我的整个代码。我提供了一些代码,我觉得这些代码能够解决我的问题。

所以这是我的一个课程:

class Terminal(Pane):

    def setText(self, text):
        self.text = text
        self.text_changed = True
        mac = "bobbyli"
        Application.monitorInput(mac)

这是另一个类:

class Application(Terminal):

    def monitorInput(self, text):

            clock = pygame.time.Clock()

            RUNNING = True
            while RUNNING:

                for event in pygame.event.get():

                    if event.type == pygame.QUIT:
                        RUNNING = False
                        break

                    if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_ESCAPE:
                            self.show_keyboard = not self.show_keyboard
                            self.show_panes = not self.show_panes

                    if event.type == pygame.MOUSEBUTTONUP:

                        #took away bits you didn't need

                        elif textSelected == "OK":
                            with open("setPhrases.txt", 'r') as infile:
                                data = infile.read()
                                print(data)
                            print("Bob")
                            print(text)
                            print("Bob")

                            self.deletePanes()
                            self.createPhrases()



                        # --- draws terminal to reflect the additions ---
                        if self.show_terminal:
                            self.terminal.draw()

            self.close()

这就是我运行代码的方式:

myApp = Application()

#start the monitoring of events on screen
myApp.monitorInput('')

所以我的问题是,每当我尝试将mac传递到Application,并尝试从代码的这一行打印时,我最终打印Bob\n (empty space)\n Bob

elif textSelected == "OK":
    with open("setPhrases.txt", 'r') as infile:
        data = infile.read()
        print(data)
    print("Bob")
    print(text)
    print("Bob")

    self.deletePanes()
    self.createPhrases()

为什么它没有传递给text。我究竟做错了什么?请帮我解决问题。老实说,我不知道我做错了什么。我以前在我的代码的另一部分中已经完成了这个并且它工作正常但是我确信我必须做出错误/不同的事情,而不是代码的那部分。

1 个答案:

答案 0 :(得分:0)

致电myApp.monitorInput('')后,方法text的本地变量Application.monitorInput将设置为'',且不会更改。对monitorInput的后续调用只是重新运行相同的函数(在不同的帧上使用不同的本地),但如果第一个仍然在运行(由于循环),那么第一个方法text内部仍然是''

顺便说一句Application.monitorInput(mac)应该引发错误,因为它错过了一个位置参数(因为你在类上运行而不是在实例上运行,因此self没有绑定)。

为了说明这一点:

class Application:
    def monitorInput(self, text):
        print ('here be dragons')

myApp = Application()
myApp.monitorInput ('bobby')
Application.monitorInput ('bobby') #exception here

引发:

Traceback (most recent call last):
  File "./amt.py", line 9, in <module>
    Application.monitorInput ('bobby')
TypeError: monitorInput() missing 1 required positional argument: 'text'