﻿"""
Zadanie 1: Nowoczesne struktury danych (Podstawy @dataclass)
Scenariusz: Klasa reprezentująca profil studenta przy użyciu nowoczesnego dekoratora dataclass.
"""

from dataclasses import dataclass

# Dekorator @dataclass automatycznie generuje metody __init__, __repr__, __eq__ i inne.
# Znacząco skraca to ilość powtarzalnego kodu (boilerplate) w porównaniu do klasycznej definicji klasy.
@dataclass
class Student:
    """
    Klasa przechowująca dane o studencie.
    Wykorzystuje mechanizm Type Hints (podpowiedzi typów) dla określenia rodzajów danych.
    """
    imie: str
    nazwisko: str
    nr_indeksu: int
    srednia: float
    # Pola z wartościami domyślnymi muszą zawsze znajdować się na końcu listy atrybutów.
    kierunek: str = "Informatyka"

if __name__ == "__main__":
    # Tworzymy dwie różne instancje klasy Student z identycznymi wartościami atrybutów.
    # Nie musieliśmy ręcznie pisać konstruktora __init__, aby przypisać argumenty do pól.
    s1 = Student("Jan", "Kowalski", 12345, 4.5)
    s2 = Student("Jan", "Kowalski", 12345, 4.5)

    # Weryfikacja działania automatycznie wygenerowanej metody __repr__.
    # Wyświetla czytelny opis wszystkich pól i ich wartości.
    print(">>> s1 = Student(\"Jan\", \"Kowalski\", 12345, 4.5)")
    print(">>> s2 = Student(\"Jan\", \"Kowalski\", 12345, 4.5)")
    print(">>> print(s1)")
    print(s1)

    # Weryfikacja działania automatycznie wygenerowanej metody __eq__.
    # Zwraca True, ponieważ wszystkie wartości pól w obu obiektach są identyczne.
    print(">>> print(s1 == s2)")
    print(s1 == s2)
