簡體   English   中英

在更高范圍內訪問python類屬性

[英]Accessing python class attributes in higher scope

仍在學習Python,菜鳥問題在這里。 我正在構建一個簡單的tkinter GUI,該GUI加載JSON數據,然后允許用戶選擇加載的數據進行繪圖。 這是我的體系結構和問題的描述:

1)在GUI中,我有一個加載按鈕,調用一個函數LoadData,以打開包含多個JSON txt文件的目錄

2)LoadData檢查是否存在某個文件名“ AutoPilot.txt”,如果存在,則調用另一個函數LoadAutopilotData

3)LoadAutopilotData創建Data類的實例,並用JSON數據填充

功能完成后,我想訪問在內部作用域(APtime)中創建的Data類的實例,但似乎無法做到這一點。

文件1的摘要:

loadBtn = Button(toolbar, image=useImg1, command=LoadData)

文件2片段:

def LoadData() :

    # Get data Path from the User
    path = askdirectory()

    # Go to that directory
    os.chdir(path)

    # Check directory to see if AutoPilot.log is available
    try:
        Autopilot = open("AutoPilot.txt")
        Load_Autopilot = True
    except:
        Load_Autopilot = False

    # If Autopilot data exists, load it and populate the listbox
    if Load_Autopilot == True:
        LoadAutopilotData()
        print(APtime.val)

文件3片段:

def LoadAutopilotData() :

    filedata = open( 'AutoPilot.txt' )

    if len( sys.argv) >= 2:
        controller = sys.argv[1]

    APtime = Data("Time", [], "sec")

File3繼續在其中填充Data類的實例。 我遇到的問題是我只能在File3中訪問APtime,而不能在“更高”級別的函數中訪問。 任何幫助是極大的贊賞。 謝謝!

您需要做的是向調用函數返回一個值。 您可以查看Python網站上有關定義函數的教程部分,以獲取有關此內容的更多詳細信息。

因此,如果我們不對您的代碼進行過多更改,則可能會出現以下情況:

解決方案1:文件2片段

def LoadData() :

    # Get data Path from the User
    path = askdirectory()

    # Go to that directory
    os.chdir(path)

    # Check directory to see if AutoPilot.log is available
    try:
        Autopilot = open("AutoPilot.txt")
        Load_Autopilot = True
    except:
        Load_Autopilot = False

    # If Autopilot data exists, load it and populate the listbox
    if Load_Autopilot == True:
        APtime = LoadAutopilotData()
        print(APtime.val)

解決方案1:文件3片段

def LoadAutopilotData() :

    filedata = open( 'AutoPilot.txt' )

    if len( sys.argv) >= 2:
        controller = sys.argv[1]

    APtime_result = Data("Time", [], "sec")

    return APtime_result
  • 您應該看到函數LoadData()將函數LoadAutopilotData()返回的值分配給APtime變量(行APtime = LoadAutopilotData() )。
  • 函數LoadAutopilotData()處理其數據后,它將使用語句return APtime_result使該值可用於調用函數。

但是您的代碼中可以做一些改進。 我唯一要提到的是您應該閱讀標准庫中的內容,因為它可以節省您一些工作。 例如,要檢查文件是否存在,有一個已經存在的功能

因此,您的File 2代碼段可能如下所示:

import os.path

def LoadData() :

    # Get data Path from the User
    path = askdirectory()

    Load_Autopilot = os.path.exists(path)

    # If Autopilot data exists, load it and populate the listbox
    if Load_Autopilot:
        APtime = LoadAutopilotData()
        print(APtime.val)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM