python - volanie metod medzi triedami

Programovacie jazyky, rady, poradňa...
Anti
Expert
Expert
Príspevky: 187
Registrovaný: 16 feb 2006, 18:04

python - volanie metod medzi triedami

Príspevok od používateľa Anti »

Dostal som sa do neprijenej situacie, ktoru neviem vyriesit.

V subore mysocket.py mam triedu MySocket a v subore timer.py mam triedu RepeatTimer, ktora dedi od threading.Thread a ma pretazenu metodu run()

Kód: Vybrať všetko

class RepeatTimer(Thread):
    def __init__(self, interval, function, iterations=0, args=[], kwargs={}):
        Thread.__init__(self)
        self.interval = interval
        self.function = function
        self.iterations = iterations
        self.args = args
        self.kwargs = kwargs
        self.finished = Event()
        self.ret = None
 
    def run(self):
        count = 0
        while not self.finished.is_set() and (self.iterations <= 0 or count < self.iterations):
            if not self.finished.is_set():
                self.ret = self.function(*self.args, **self.kwargs)
                count += 1
            self.finished.wait(self.interval)
 
    def cancel(self):
        self.finished.set()
V main.py si chcem vytvorim instancie oboch tried.
Problem nastava pri triede RepeatTimer. Jej konstruktor v argumente ocakava funkciu, ktoru bude v metode run() volat.

Pri kode

Kód: Vybrať všetko

soket = MySocket("www.hojko.com", 80)
get_cmdlist_t = RepeatTimer(2.0, soket.get, "/index.php")
dostavam error

Kód: Vybrať všetko

self.ret = self.function(*self.args, **self.kwargs)
TypeError: get() takes exactly 2 arguments (1 given)
Tipujem, ze to bude kvoli self argumentu, ktory sa tam automaticky nepridava.

Skusal som aj

Kód: Vybrať všetko

soket = MySocket("www.hojko.com", 80)
get_cmdlist_t = RepeatTimer(2.0, soket.get, soket, "/index.php")
a vtedy dostavam error

Kód: Vybrať všetko

self.ret = self.function(*self.args, **self.kwargs)
TypeError: get() takes exactly 2 arguments (11 given)
Co s tym?


MySocket.get(self, page):

Kód: Vybrať všetko

def get(self, page):
        self.s.send("GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\n\r\n" % (page, self.host, self.useragent))
   
        data = self.s.recv(1024)
        return data
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: python - volanie metod medzi triedami

Príspevok od používateľa paralen »

V tej metode get mas okrem self este aj parameter page, nemal by si este pridat paramater ak volas to soket.get ?

Kód: Vybrať všetko

soket = MySocket("www.hojko.com", 80)
get_cmdlist_t = RepeatTimer(2.0, soket.get("www.hojko.com"), "/index.php")
?
Anti
Expert
Expert
Príspevky: 187
Registrovaný: 16 feb 2006, 18:04

Re: python - volanie metod medzi triedami

Príspevok od používateľa Anti »

pridal som ho tam ako dalsi parameter RepeatTimer()
Napísať odpoveď