Инкапсуляция¶
В объектно-ориентированных языках программирования есть спецификаторы, ограничивающие доступ к аттрибутам. Главной задачей является отделение деталей реализации логики объекта от того как с ним надо взаимодействовать.
В языке Python в отличие от многих других языков вместо ключевых слов используется знак нижнего подчёркивания.
public - Данный аттрибут доступен всем:
class Person:
def __init__(self, name):
self.name = name # публичный аттрибут
p = Person("John")
p.name = "Mark"
private - Аттрибут сокрыт от посторонних глаз и доступен только
самому объекту:
class Person:
def __init__(self, name, age):
self.name = name
self.set_age(age)
def get_age(self):
return self.__age
def set_age(self, age):
if age >= 0:
self.__age = int(age) # __age - приватный аттрибут
else:
self.__age = 0
print("Возраст не может быть отрицательным!")
p = Person("John", 19)
print(p.get_age()) # 19
p.set_age(20)
print(p.get_age()) # 20
p.__age = 21 # Error
p._Person__age = 21
print(p.get_age()) # 21
Задачи¶
Описать класс десятичного счётчика. Он должен обладать внутренней переменной, хранящей текущее значение, методами повышения значения (
increment) и понижения (decrement), получения текущего значенияget_counter. Учесть, что счётчик не может опускаться ниже 0.Создать класс для часов. Должна быть возможность установить время при создании объекта. Также необходимо реализовать методы, с помощью которых можно добавлять по одной минуте/секунде или по одному часу к текущему времени. Помнить, что значения минут и секунд не могут превышать 59, а часов 23.
Доработать предыдущую задачу, чтобы можно было складывать двое часов друг с другом. Для перегрузки оператора
+использовать метод__add__(self, other).Создать классы для травоядного животного и травы. Животное должно уметь поедать траву, если испытывает голод, в противном случае отказываться от лакомства. Трава должна обладать питательностью, в зависимости от которой животное будет насыщаться.