簡體   English   中英

如何從另一個類運行函數並使用其變量?

[英]How To Run A Function From Another Class & Use Its Variable?

我是Python的初學者,為我們的最后一年項目開發一個簡單的應用程序。 這是我無法解決的唯一部分,我非常感謝你的幫助。 我需要從實時更新csv文件中獲取值,獲取第一個元素並將其與引用csv匹配。 那部分已經有效了。 然后我需要它根據playound播放相應的聲音。 那部分也已經有效了。

但是,由於它將位於Kivy應用程序中,因此我需要創建多個類。 有些將處理數據處理方,Kivy部分將處理顯示部分。 但我今天的問題集中在不在Kivy的Python部分。

第一個類處理csv,playound和numpy匹配。

第二個類是我試圖調用第一個類的函數來讓它們運行的​​地方。 我還嘗試在第一個類中獲取where變量,以便我可以在if語句中使用它來驗證匹配並輸出文本顯示。

import serial
import sys
import numpy as np
import time
import csv
import os
import string 
import collections
from playsound import playsound
from pathlib import Path
import os, sys



#import keyboard
class Identifier:
    def csvwriter(self): #function for writing csv file
        try:
            ser = serial.Serial('COM10', baudrate=9600)
            ser.flushInput()

            while True:
                ser_bytes = ser.readline()
                print(ser_bytes)
                file = open("letterz5.csv", "a")
                file.write(str(ser_bytes))
                file.close()

         #       if keyboard.is_pressed('esc'):
         #           break;

            ser.close
        except:
            print("Unexpected error:", sys.exc_info()[0])
            print("Unexpected error:", sys.exc_info()[1])
    def fn_voice(self): #function for parsing and comparing csv file.
        count=1
        while (count>0):
            livecsv=np.genfromtxt("lettera.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
            refcsv=np.genfromtxt("refcsv1.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
            A=np.array(livecsv)
            B=np.array(refcsv)
            D = B - A[-1]
            match= B[np.abs(D).sum(axis=1).argmin()]
            where=match[0]
            voice=fn_voice(where)
            time.sleep(1)
            count = count + 1
        var=where
        if var==1:
            A=playsound('audio-alphabet/A.wav',True)
            return A
        elif var==2:
            B=playsound('audio-alphabet/B.wav',True)
            return B
        elif var==3:
            C=playsound('audio-alphabet/C.wav',True)
            return C
        elif var==4:
            D=playsound('audio-alphabet/D.wav',True)
            return D
        elif var==5:
            E=playsound('audio-alphabet/E.wav',True)
            return E
        elif var==6:
            F=playsound('audio-alphabet/F.wav',True)
            return F
        elif var==7:
            G=playsound('audio-alphabet/G.wav',True)
            return G
        elif var==8:
            H=playsound('audio-alphabet/H.wav',True)
            return H
        elif var==9:
            I=playsound('audio-alphabet/I.wav',True)
            return I
        elif var==10:
            J=playsound('audio-alphabet/J.wav',True)
            return J
        elif var==11:
            K=playsound('audio-alphabet/K.wav',True)
            return K
        elif var==12:
            L=playsound('audio-alphabet/L.wav',True)
            return L
        elif var==13:
            M=playsound('audio-alphabet/M.wav',True)
            return M
        elif var==14:
            N=playsound('audio-alphabet/N.wav',True)
            return N
        elif var==15:
            O=playsound('audio-alphabet/O.wav',True)
            return O
        elif var==16:
            P=playsound('audio-alphabet/P.wav',True)
            return P
        elif var==17:
            Q=playsound('audio-alphabet/Q.wav',True)
            return Q
        elif var==18:
            R=playsound('audio-alphabet/R.wav',True)
            return R
        elif var==19:
            S=playsound('audio-alphabet/S.wav',True)
            return S
        elif var==20:
            T=playsound('audio-alphabet/T.wav',True)
            return T
        elif var==21:
            U=playsound('audio-alphabet/U.wav',True)
            return U
        elif var==22:
            V=playsound('audio-alphabet/V.wav',True)
            return V
        elif var==23:
            W=playsound('audio-alphabet/W.wav',True)
            return W
        elif var==24:
            X=playsound('audio-alphabet/X.wav',True)
            return X
        elif var==25:
            Y=playsound('audio-alphabet/Y.wav',True)
            return Y
        elif var==26:
            Z=playsound('audio-alphabet/Z.wav',True)
            return Z
        os.system("rm lettera.csv")



class LetterAScreen(Identifier):
    def identity(self): #I tried to call the functions of Identifier class here but they won't run
        fn_voice() #I need the playsound part to only return playsound when the input data is correct
        fn_csvwriter()
        iden=fn_voice().where #I need to get the variable 'where' from fn_voice() but I can't seem to get it
     def verifier(self):
        verify=identity.iden
        if verify == 1:
            print ("correct")
        else:
            print ("incorrect")

我該怎么做? 如何讓所有第一個類運行,以及如何獲取where變量以便我可以在verifier函數中使用它? 非常感謝你。

在python中,你不能像使用fn_voice().where那樣訪問變量。

請閱讀https://pythonspot.com/scope/上有關范圍的更多信息。

問題的解決方案是在類中分配where引用(變量)而不是方法。

class Identifier:
    where = None
    def fn_voice(self):
        where = match[0]

然后,你將能夠訪問where ,如:

Identifier.where

NB。 請記住檢查where的值是否為None 我們可以使用標准的python真值測試https://docs.python.org/2.4/lib/truth.html

if Identifier.where:
    #Logic if where is not None.

暫無
暫無

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

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