[英]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.