TypeError: __init__() отсутствует 1 обязательный позиционный аргумент: 'humidity'
работаю с классами и многопоточностью, но столкнулся с проблемой, которую не могу никак обойти.
Traceback (most recent call last): File "D:\Project\1234.py", line 38, in <module> create_threads() File "D:\Project\1234.py", line 28, in create_threads my_thread1 MyThread(temperature) TypeError: __init__() missing 1 required positional argument: 'humidity'
Задание выглядит следующим образом: нужно формировать значения температуры и влажности, а затем выводить каждое из них по 3 раза по порядку с интервалом от 1 до 5 секунд.
import random
import time
from threading import Thread
class MyThread(Thread):
def __init__ (self, temperature, humidity):
Thread.__init__(self)
self.temperature = temperature
self.humidity = humidity
def run(self):
amount = random.randint(1, 5)
time.sleep(amount)
self.temperature = random.uniform(0, 40)
b = float('{:.1f}'.format(self.temperature))
msg_temp = "Температура %s °С." % b
print(msg_temp)
self.humidity = random.randint(0, 100)
msg_hum = "Влажность %s процента." % self.humidity
print(msg_hum)
def create_threads():
for i in range(3):
temperature = (i+1)
my_thread1 = MyThread(temperature)
my_thread1.start()
my_thread1.join()
for n in range(3):
humidity = (n+1)
my_thread2 = MyThread(humidity)
my_thread2.start()
my_thread2.join()
if __name__ == "__main__":
create_threads()
Ответы (1 шт):
Типы аргументов функции
При вызове функции аргументы можно передавать двумя способами:
как позиционные - передаются в том же порядке, в котором они определены при создании функции. То есть, порядок передачи аргументов определяет, какое значение получит каждый аргумент
как ключевые - передаются с указанием имени аргумента и его значения. В таком случае, аргументы могут быть указаны в любом порядке, так как их имя указывается явно.
import random
import time
from threading import Thread
class MyThread(Thread):
def __init__ (self, temperature=None, humidity=None):
Thread.__init__(self)
self.temperature = temperature
self.humidity = humidity
def run(self):
amount = random.randint(1, 5)
time.sleep(amount)
if self.temperature:
self.temperature = random.uniform(0, 40)
b = float('{:.1f}'.format(self.temperature))
msg_temp = "Температура %s °С." % b
print(msg_temp)
if self.humidity:
self.humidity = random.randint(0, 100)
msg_hum = "Влажность %s процента." % self.humidity
print(msg_hum)
def create_threads():
for i in range(3):
temperature = (i+1)
my_thread1 = MyThread(temperature=temperature)
my_thread1.start()
my_thread1.join()
for n in range(3):
humidity = (n+1)
my_thread2 = MyThread(humidity=humidity)
my_thread2.start()
my_thread2.join()
if __name__ == "__main__":
create_threads()