如何在函数中调用变量?新手问题

时间:2020-02-09 05:36:53

标签: python

此新手问题的歉意。我不确定我的措词是否正确。

我在一个函数内有一个类,该类列出了一堆变量,并且我希望能够选择在最终函数调用时打印并返回哪些变量。但是,我显然对对象没有足够的了解来完成此操作,因为当我尝试尝试某些操作时,它会引发错误。

def gpscall(call):
    #Write GPSinput
    out = ''
    ser.write(com.GPSstatus.encode())
    time.sleep(1)

    #Read output
    while ser.inWaiting() > 0:
        decoded = (ser.read(1).decode)
        out += decoded()

    strlen = len(str(out))
    substr = out[0:strlen-9]

    #GPS? information list
    variables = substr.splitlines()

    #Storing each output in a variable
    class GPS:
        PULSE_SAWTOOTH = [int(s) for s in variables[1] if s.isdigit()]
        TRACKED_SATELLITES = [int(s) for s in variables[2] if s.isdigit()]
        VISIBLE_SATELLITES = [int(s) for s in variables[3] if s.isdigit()]

        LONGITUDE = variables[5]
        longlen = len(LONGITUDE)
        LONGDEG = LONGITUDE[0:longlen-7]
        LONGMIN = LONGITUDE[longlen-7:]

        LATITUDE = variables[6]
        latlen = len(LATITUDE)
        LATDEG = LATITUDE[0:latlen-7]
        LATMIN = LATITUDE[latlen-7:]

        HEIGHT = variables[7]
        KNOTS = variables[8]
        DEGREES = [9]

        GPS_STATUS = variables[10]
        TIMING_MODE = variables[17] 
        FIRMWARE_VERSION = variables[20]

    print (call)
    return (call)

if __name__ == "__main__":

    #Call the functions
    gpscall(gpscall.GPS.LATITUDE)

这会引发错误

函数“ gpscall”没有“ GPS”成员。

我不明白为什么它看不到类,我认为我没有正确使用函数参数。

对于我写得不好的代码的任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:1)

也许您的意图是这样的? __init__ will initialize the object, and the self. will "save variables to the object."

class GPS:
    def __init__(self):
        #Write GPSinput
        ser.write(com.GPSstatus.encode())

        #Read output
        out = ''
        while ser.inWaiting() > 0:
            decoded = (ser.read(1).decode)
            out += decoded()

        #GPS information list
        substr = out[0:len(str(out))-9]
        variables = substr.splitlines()

        self.PULSE_SAWTOOTH = [int(s) for s in variables[1] if s.isdigit()]
        self.TRACKED_SATELLITES = [int(s) for s in variables[2] if s.isdigit()]
        self.VISIBLE_SATELLITES = [int(s) for s in variables[3] if s.isdigit()]

        self.LONGITUDE = variables[5]
        self.LONGDEG = LONGITUDE[0:len(LONGITUDE)-7]
        self.LONGMIN = LONGITUDE[len(LONGITUDE)-7:]

        self.LATITUDE = variables[6]
        self.LATDEG = LATITUDE[0:len(LATITUDE)-7]
        self.LATMIN = LATITUDE[len(LATITUDE)-7:]

        self.HEIGHT = variables[7]
        self.KNOTS = variables[8]
        self.DEGREES = variables[9]

        self.GPS_STATUS = variables[10]
        self.TIMING_MODE = variables[17]
        self.FIRMWARE_VERSION = variables[20]

gps = GPS()
print(gps.GPS_STATUS) 

答案 1 :(得分:-2)

该函数内部的cls非常完美,并且那里没有错。您只是试图以错误的方式调用函数和cls对象。

if __name__ == "__main__":

    #Call the functions
    gpscall(gpscall.GPS.LATITUDE)  <---- ERROR HERE

gpscall是一个函数,因此当您尝试访问GPS.LATITUDE时,它将找不到任何对象。您将必须执行此操作

gpscall(gpscall("").GPS.LATITUDE)

但是我认为最好的方法是在cls内编写func。您仍然可以访问cls的所有变量,并且不会造成太多麻烦。

PS:这是一个很好的问题,而不是一个菜鸟。祝你好运