SeedFork

Классы (с Goable)

Sep 25th, 2021
687
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. """
  2. Симулятор дорожных карт (для простоты создаем на прямой)
  3.  
  4. На дорогах есть: машины и такси
  5. Машины: имеют координату и функцию передвижения
  6. Такси: все тоже самое, что и машины, плюс стоимость поездки
  7. """
  8.  
  9.  
  10. class Goable:
  11.  
  12.     # Констурктор класса
  13.     def __init__(self):
  14.         self._coord = 0  # Поле "Координата"
  15.  
  16.     """
  17.    self.coord - публичная переменная, то есть ее можно увидеть из "любой точки мира"
  18.    self._coord - приватная переменная, то есть ее можно увидеть ТОЛЬКО внутри класса или дочернего класса
  19.    """
  20.  
  21.     # Метод передвиженя (здесь нам все равно на реализацию, будем реализовывать в дочерних классах)
  22.     def move(self, dx):
  23.         pass
  24.  
  25.     # Метод получения координаты (геттер)
  26.     def get_coord(self):
  27.         return self._coord
  28.  
  29.  
  30. class Car(Goable):
  31.  
  32.     # Здесь мы переопределяем метод move
  33.     def move(self, dx):
  34.         self._coord += dx
  35.  
  36.     # Питоновская функция для кастинга класса в строку (без нее нельзя засунуть переменную класса в print)
  37.     def __str__(self):
  38.         return "Car " + str(self._coord)
  39.  
  40.  
  41. class Taxi(Goable):
  42.  
  43.     # Переопределяем конструктор
  44.     def __init__(self, cost):
  45.         super().__init__()  # super() - обращение к родительскому классу
  46.         self._cost = cost  # Поле "Стоитмость за единицу пути"
  47.         self._distance = 0  # Поле "Пройденный путь"
  48.  
  49.     def get_total_cost(self):
  50.         t = self._cost*self._distance
  51.         self.reset()
  52.         return t
  53.  
  54.     def reset(self):
  55.         self._distance = 0
  56.  
  57.     # Здесь мы переопределяем метод move снова :)
  58.     def move(self, dx):
  59.         super().move(dx)
  60.         self._distance += abs(dx)
  61.  
  62.     # Здесь мы перегружаем метод move
  63.     def move(self):
  64.         self.move(1)
  65.         self._distance += 1
  66.  
  67.     def __str__(self):
  68.         return "Taxi " + str(self._coord) + " " + str(self.get_total_cost())
RAW Paste Data