【问题标题】:Getting list from a function within a different class to a function within a different class从不同类中的函数获取列表到不同类中的函数
【发布时间】:2022-08-17 21:27:53
【问题描述】:

我在玩 Kivy 有点不明白为什么 MenuScreen.number_list 不从 MenuScreen 类返回列表。

class MenuScreen(Screen):
    def process(self):
        self.text = self.ids.input.text
        print(self.text)
    pass

    def submit(self):
        number_list = []
        for i in self.text:
            number_list.append(int(i))

class GuessScreen(Screen):
    def guess(self, number):
        for i in MenuScreen.number_list:
            if correct == True:
                if number == i:
                    print(\"Correct, next number\")
                    correct = True
                else:
                    print(\"Wrong\")
                    correct = False
    pass

    标签: python


    【解决方案1】:

    编辑:我意识到我误解了这个问题,数字列表必须是一个类变量才能被调用。离开这个,它仍然可能(潜在)有用。

    您的代码没有返回任何值。它代表,这种方法:

    def submit(self):
            number_list = []
            for i in self.text:
                number_list.append(int(i))
    

    将所有内容附加到列表中,然后离开该方法。您没有“return”关键字。

    def submit(self):
            number_list = []
            for i in self.text:
                number_list.append(int(i))
            return number_list  # <-- this is necessary in ANY function where you wish
                                #     to get some value/object out of the 
                                #     function into a different scope.
    

    这会在函数调用后从函数返回数字列表,因此您可以执行以下操作:

    ms = MainScreen()
    my_number_list = ms.submit() 
    

    作为旁注,您的代码中使用的“pass”关键字不是必需的,可能会导致一些意外行为,所以我会意识到这一点!

    【讨论】:

    • 他们不需要return,也不需要新变量my_number_list = ms.submit()。如果他们将number_list声明为类的属性,则在初始化类后,他们可以通过对象访问该属性
    • @AlexandruDuDu 你是对的,我最初误解了这个问题。
    【解决方案2】:

    您需要将number_list 声明为类属性,以便您可以使用它,否则它只是一个变量,其范围仅在方法内部。

    class MenuScreen(Screen):
        number_list = []
        def process(self):
            self.text = self.ids.input.text
            print(self.text)
        pass
    
        def submit(self):
            number_list = []
            for i in self.text:
                number_list.append(int(i))
    
    class GuessScreen(Screen):
        def guess(self, number):
            MenuScreen = MenuScreen(Screen)
            MenuScreen.submit()
            for i in MenuScreen.number_list:
                if correct == True:
                    if number == i:
                        print("Correct, next number")
                        correct = True
                    else:
                        print("Wrong")
                        correct = False
        pass
    

    并确保为该类创建一个对象并调用其方法

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2021-05-01
      • 2014-09-11
      相关资源
      最近更新 更多