簡體   English   中英

Python線程和傳遞引用

[英]Python threading and passing references

如何傳遞對類的實例化(自身)的引用。 我仍在學習Python,但尚未弄清楚。

我有兩個警報,想要使其自動運行,並在后台連續運行。 如果我可以打電話給他們以執行某些操作,那將是很好的。

基本上,這為什么不起作用?

from time import sleep
import threading

class alarm:

    def __init__(self, interval):
        self.activated = False
        self.sound = "Beeeep"
        self.interval = interval

        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True
        thread.start()

    def run(self):
        # this runs forever
        while True:
            if self.activated:
                print(self.sound)
            else:
                print("(quiet)")
            sleep(self.interval)

    def on(self):
        self.activated = True

    def off(self):
        self.activated = False

    def set_beep(self, sound):
        self.sound = sound


def main():

    a1 = alarm(.5)
    a2 = alarm(.5)

    print("Waiting 3 secs")
    sleep(3)
    print("Turning on alarm1")
    a1.on

    sleep(2)
    print("Turning on alarm2")
    a2.on

    sleep(2)
    print("Turning off alarms")
    a1.off
    a2.off

    print("Waiting 10 seconds")
    sleep(10)


if __name__ == '__main__':
    main()

輸出為:

(安靜)(安靜)等待3秒(安靜)(安靜)(安靜)(安靜)(安靜)(安靜)(安靜)(安靜)(安靜)(安靜)開啟鬧鈴1(安靜)(安靜)(安靜) )

它不會打開任何一個警報。

發生這種情況是因為您沒有將方法調用為“ on”和“ off”,要調用一個方法,您必須在其后插入一對括號,其中包含任何參數。

def main():

a1 = alarm(.5)
a2 = alarm(.5)

print("Waiting 3 secs")
sleep(3)
print("Turning on alarm1")
a1.on()

sleep(2)
print("Turning on alarm2")
a2.on()

sleep(2)
print("Turning off alarms")
a1.off()
a2.off()

print("Waiting 10 seconds")
sleep(10)

您不會使用a1.on和a1.off來調用函數,而只是將它們分配為空。 為了進一步澄清,

a1.on is basically "" = a1.on

例如,如果要鍵入:

a = a1.on

然后將函數a1.on分配給a,因此:

a()

然后將執行該功能,該功能與

a1.on()

所以:

from time import sleep
import threading

class alarm:
    def __init__(self, interval):
        self.activated = False
        self.sound = "Beeeep"
        self.interval = interval

        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True
        thread.start()

    def run(self):
        # this runs forever
        while True:
            if self.activated:
                print(self.sound)
            else:
                print("(quiet)")
            sleep(self.interval)

    def on(self):
        self.activated = True

    def off(self):
        self.activated = False

    def set_beep(self, sound):
        self.sound = sound

def main():

    a1 = alarm(.5)
    a2 = alarm(.5)

    print("Waiting 3 secs")
    sleep(3)
    print("Turning on alarm1")
    a1.on()

    sleep(2)
    print("Turning on alarm2")
    a2.on()

    sleep(2)
    print("Turning off alarms")
    a1.off()
    a2.off()

    print("Waiting 10 seconds")
    sleep(10)

if __name__ == '__main__':
    main()

暫無
暫無

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

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