Wpis powstał z pomocą: ChatGPT
Prompt: Przerób kod ([wpisałem ten, który pokazuję poniżej]) na klasę, która obsługiwać będzie urządzenia IoT o różnych nazwach i różnej ilości parametrów do przesyłania i obsługi.
ChatGPT: Oto klasa IoTDevice
, która obsługuje urządzenia IoT o różnych nazwach i różnej ilości parametrów do przesyłania i obsługi:
class IoTDevice:
def __init__(self, device_name, **device_params):
self.device_name = device_name
self.params = device_params
def send_data(self):
# Symulacja przesyłania danych do chmury lub innego systemu
return f"Data from {self.device_name} sent: {self.params}"
def receive_data(self, new_data):
# Symulacja odbierania danych przez urządzenie
print(f"{self.device_name} received new data: {new_data}")
# Przykłady użycia klasy
thermometer = IoTDevice(device_name='Thermometer', temperature=25.5, humidity=60)
print(thermometer.send_data())
smart_lock = IoTDevice(device_name='SmartLock', status='locked')
print(smart_lock.send_data())
# Symulacja odbierania danych przez urządzenie
new_data = {'temperature': 26.0, 'humidity': 62}
thermometer.receive_data(new_data)
W tym przypadku klasa IoTDevice
przyjmuje nazwę urządzenia (device_name
) oraz dowolną liczbę parametrów (**device_params
), które są traktowane jako słownik. Metoda send_data
symuluje przesyłanie danych z urządzenia do chmury lub innego systemu, zwracając odpowiednią wiadomość. Metoda receive_data
symuluje odbieranie danych przez urządzenie.
W przykładowych użyciach utworzono dwa obiekty klasy IoTDevice
reprezentujące termometr i inteligentny zamek, z różnymi zestawami parametrów. Następnie wywołano metodę send_data
dla każdego z urządzeń, a także przeprowadzono symulację odbierania danych przez termometr za pomocą metody receive_data
.
Na podstawie: W3D1: Instantiating Class Objects with Hashes, Arg & Kwargs (3 of 4)
Tworzymy szkic ClassEmployee.py:
class Employee:
def __init__(self, **employee_info):
for item in employee_info:
print(item)
new_employee = Employee(first_name='Jan', last_name='Kowalskil')
Wynik w terminalu po uruchomieniu programu:
first_name
last_name
Dodajemy linijkę:
print(dir(new_employee))
Zostają wyświetlone metody dostępne w klasie:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Użyjemy metody __dict__
class Employee:
def __init__(self, **employee_info):
self.__dict__.update(**employee_info)
new_employee = Employee(first_name='Jan', last_name='Kowalskil')
print(dir(new_employee))
Wynik w terminalu po uruchomieniu programu:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'first_name', 'last_name']
[kod1]
class Employee:
def __init__(self, **employee_info):
self.__dict__.update(**employee_info)
def say_hello(self):
return f"Hello, my name is {self.first_name} {self.last_name}"
new_employee = Employee(first_name='Jan', last_name='Kowalski
print(new_employee.say_hello())
Wynik w terminalu po uruchomieniu programu:
> Hello, my name is Jan Kowalski
Alternatywne tworzenie słownika z dowolną ilością elementów. Ta wersja działa z MicroPython-em na ESP32. Podana wyżej z powodu braku modułu __dict__ zgłasza błąd
class Employee:
def __init__(self, **employee_info):
for key, value in employee_info.items():
setattr(self, key, value)
def say_hello(self):
return f"Hello, my name is {self.first_name} {self.last_name}"
new_employee = Employee(first_name='Jan', last_name='Kowalski')
print(new_employee.say_hello())