简体   繁体   中英

Calling a class method from a different file using Schedule Module in Python

I'm trying to call a method from a class that is in a different file. This is how my code looks:

main.py

###Imports
import funct as f
import schedule
import time
###More Imports

###Grabbing GPS data from user and assigning values

bboxsize = f.find(userLat, userLng, userRad)

if __name__ == '__main__':
    r = f.find.radar(bboxsize) ### <---- Line 14
    schedule.every(5).seconds.do(r)
    while True:
        schedule.run_pending()
        time.sleep(1)


funct.py

###Imports

class find:

    def __init__(self, userLat, userLng, userRad):
        self.userLat = userLat
        self.userLng = userLng
        self.userRad = userRad

    def bboxFormula(self):
    ### Lots of code that is not important to this
    return bboxsize

    def radar(self, bboxsize):
        api = OpenSkyApi(username='###', password='###')
        states = api.get_states(bbox=bboxsize)
        print(f"vvvvvv| {time.ctime(time.time())} |vvvvvv")
        print("------------------------------------------")
        for s in states.states:
            print("Callsign: %r, Latitude: %r, Longitude: %r, Altitude (meters): %r, Velocity %r)" % (s.callsign, s.latitude, s.longitude, s.geo_altitude, s.velocity))
        print("------------------------------------------")

When running this I get:

Traceback (most recent call last):
  File "/##/##/##/##/main.py", line 14, in <module>
    r = f.find.radar(bboxsize)
TypeError: find.radar() missing 1 required positional argument: 'bboxsize'

I can run all of this in one file without classes, so I know it works. I have been messing with this for a while getting all sorts of errors with every change I make.

Is there something that I'm missing or is there no way for me to do this with the Schedule Module?

I'm just guessing here, but I think you had different code when it was all one file.

Now with two files I think you meant to write this:

find = f.find(userLat, userLng, userRad)
boxsize = find.bboxFormula()

if __name__ == '__main__':
    r = lambda :find.radar(bboxsize) ### <---- Line 14
    schedule.every(5).seconds.do(r)
    while True:
        schedule.run_pending()
        time.sleep(1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM