Klasy w Python-ie. Słownik z nieokreśloną liczbą par

“Słownik z nieokreśloną liczbą par”. Grafika-AI wygenerowana przez Microsoft Bing.

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())

Dodaj komentarz