class Student: def __init__(self, name: str, gNumber: int, gpa: float): self.set_name(name) self.set_gNumber(gNumber) self.set_gpa(gpa) # --- Name --- def get_name(self) -> str: return self._name def set_name(self, value: str) -> None: if not isinstance(value, str): raise TypeError("Name must be a string") if not value.isalpha(): raise ValueError("Name must contain only alphabetic characters") if not (1 <= len(value) <= 255): raise ValueError("Name must be between 1 and 255 characters") self._name = value # --- gNumber --- def get_gNumber(self) -> int: return self._gNumber def set_gNumber(self, value: int) -> None: if not isinstance(value, int): raise TypeError("gNumber must be an integer") if not (100000 <= value <= 999999): raise ValueError("gNumber must be a 6-digit number between 100000 and 999999") self._gNumber = value # --- GPA --- def get_gpa(self) -> float: return self._gpa def set_gpa(self, value: float) -> None: if not isinstance(value, (int, float)): raise TypeError("GPA must be a number") if not (0.0 <= value <= 6.0): raise ValueError("GPA must be between 0.0 and 6.0") self._gpa = float(value) def __str__(self) -> str: return f"Student(Name: {self._name}, gNumber: {self._gNumber}, GPA: {self._gpa:.2f})"