Напишіть клас User(користувач). Дайте йому два обов’язкові атрибути first_name i last_name, і ще "декілька", які зазвичай зберігаються в користувацькому профілі
(у мовний пароль у декілька)Напишіть метод describe_user(), який буде виводити повну інформацію про користувача.
зробити дві версій цей та другий з методом інкапсуляцій(щоб зовні неможна було змінювати)
на пайтоне
Answers & Comments
Verified answer
Ответ:
Версія без інкапсуляції:
class User:
def __init__(self, first_name, last_name, email, age, country):
self.first_name = first_name
self.last_name = last_name
self.email = email
self.age = age
self.country = country
def describe_user(self):
print(f"User's name: {self.first_name} {self.last_name}")
print(f"Email address: {self.email}")
print(f"Age: {self.age}")
print(f"Country: {self.country}")
Версія з інкапсуляцією:
class User:
def __init__(self, first_name, last_name, email, age, country):
self._first_name = first_name
self._last_name = last_name
self._email = email
self._age = age
self._country = country
def describe_user(self):
print(f"User's name: {self._first_name} {self._last_name}")
print(f"Email address: {self._email}")
print(f"Age: {self._age}")
print(f"Country: {self._country}")
# Геттери для змінних класу
def get_first_name(self):
return self._first_name
def get_last_name(self):
return self._last_name
def get_email(self):
return self._email
def get_age(self):
return self._age
def get_country(self):
return self._country
# Сеттери для змінних класу
def set_first_name(self, first_name):
self._first_name = first_name
def set_last_name(self, last_name):
self._last_name = last_name
def set_email(self, email):
self._email = email
def set_age(self, age):
self._age = age
def set_country(self, country):
self._country = country
У версії з інкапсуляцією, змінні класу починаються зі знаку "_" і не можуть бути доступні ззовні класу без використання методів-геттерів і сеттерів. За допомогою методів-геттерів можна отримати значення змінних класу, а за допомогою методів-сеттерів можна змінити значення змінних класу. Наприклад, щоб змінити ім'я користувача у версії з інкапсуляцією, треба викликати метод set_first_name() з параметром нового імені, а не змінювати змінну _first_name напряму.
Объяснение:
Ответ: з методом інкапсуляції
class User:
def __init__(self, first_name, last_name, email, password):
self.first_name = first_name
self.last_name = last_name
self.email = email
self.__password = password
def describe_user(self):
print(f"User: {self.first_name} {self.last_name}")
print(f"Email: {self.email}")
print(f"Password: {self.__password}")
def set_password(self, new_password):
self.__password = new_password
user1 = User("Py", "thon", "[email protected]", "password123")
user1.describe_user()
user1.set_password("newpassword123")
user1.describe_user()