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