一个函数可以在同一类中使用另一个函数吗?

时间:2018-09-12 07:39:09

标签: python function inheritance tkinter global

我想减少代码,并考虑创建一个从另一个Class收集内容的函数,然后将我将来的Function引用到“ content_collector”以能够访问变量(note_input,title_lable等)。

首先,如问题所述,函数可以访问其他函数中的变量吗?

我也试图使它们成为全局变量,但是我收到了{SyntaxError:在全局声明之前将名称'note_input'分配给了

否则,我尝试在Function之外但在类内创建变量,但我认为存在继承问题,因为无法识别'self'。

class Functions:

    def content_collector(self):

        note_input = self.note_entry.get("1.0", "end-1c")
        title_label = self.title_entry.get()
        author_label = self.author_entry.get()
        year_label = self.year_entry.get()
        others_label = self.others_entry.get()

        global note_input, title_label, author_label, year_label, others_label


    def file_saveas(self):

       dic = {"title": title_label,
              "author": author_label,
              "year": year_label,
              "other": others_label,
              "note": note_input}

class EntryWidgets(Functions):

    def __init__(self, master):...

一如既往,非常感谢您提供有用的答案!

1 个答案:

答案 0 :(得分:0)

  

[..]函数可以访问其他函数中的变量吗?

不。变量只能在其范围内访问。对于您的content_collector,变量属于该函数的本地范围,并且只能从该函数内部访问。除了它们的范围外,这些变量还具有生存期。它们仅在函数执行时存在。 file_saveas执行期间,content_collector未执行,因此变量此时不存在。

关于SyntaxError:正如所说的那样,您尝试在为变量赋值之后使变量成为全局变量。您需要将global语句移至content_collector方法的开头。即使这样,也只能在content_collector执行至少一次之后才能知道这些名称(因为只有这样,global语句才能在本地函数作用域之外使用这些名称)。在调用file_saveas之前先调用content_collector会导致NameError。

您可以使它们成为实例变量,例如,在__init__方法中输入,或让content_collector返回这些值,例如:

class Functions:

    def content_collector(self):

        dic = {"note": self.note_entry.get("1.0", "end-1c"),
               "title": self.title_entry.get(),
               "author": self.author_entry.get(),
               "year": self.year_entry.get(),
               "other": self.others_entry.get()}
        return dic


    def file_saveas(self):

       dic = self.content_collector()