Python:如何将属性从一个函数调用到另一个函数?

时间:2013-08-14 06:15:10

标签: python function python-3.x python-3.3

这是代码:

from tkinter import *
import os

class App:

    charprefix = "character_"
    charsuffix = ".iacharacter"
    chardir = "data/characters/"
    charbioprefix = "character_biography_"

    def __init__(self, master):
        self.master = master
        frame = Frame(master)
        frame.pack()

        # character box
        Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2)
        self.charbox = Listbox(frame)
        for chars in []:
            self.charbox.insert(END, chars)
        self.charbox.grid(row = 1, column = 0, rowspan = 5)
        charadd = Button(frame, text = "   Add   ", command = self.addchar).grid(row = 1, column = 1)
        charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1)
        charedit = Button(frame, text = "    Edit    ", command = self.editchar).grid(row = 3, column = 1)

        for index in self.charbox.curselection():
            charfilelocale = self.charbox.get(int(index))
            charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
            charinfo = self.charfile.read().splitlines(0)

现在我想知道的是,如果我打算在另一个函数中调用charinfo,我该怎么称呼它?我正在使用Python 3.3和app.charinfo或self.charinfo不起作用。如果我的代码不正确,你能帮忙解决吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您当前的实现将其声明为本地变量,因此可以在外部访问。 为了实现这一目标,分配需要在self.charinfo上进行:

当您想从其他地方访问charinfo时   - self.charinfo在类定义中起作用,并且
  - app.charinfo在课堂外/来自实例

for index in self.charbox.curselection():
    charfilelocale = self.charbox.get(int(index))
    charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
    # notice the self.charinfo here
    self.charinfo = self.charfile.read().splitlines(0)

最好确保属性self.charinfo在循环外可用,以避免错误,如果它循环0次

self.charinfo = None
for index in self.charbox.curselection():
    charfilelocale = self.charbox.get(int(index))
    charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
    self.charinfo = self.charfile.read().splitlines(0)