Задания по классам python

Класс Python — Упражнения, практика, решение

3. Напишите класс Python, чтобы найти правильность строки скобок, ‘(‘, ‘)’, », ‘[‘ и ‘]. Эти скобки должны быть закрыты в правильном порядке, например, «()» и «() [] <>» допустимы, но «[)», «(

4. Напишите класс Python, чтобы получить все возможные уникальные подмножества из набора различных целых чисел. — Перейти к редактору
Вход: [4, 5, 6]
Вывод: [[], [6], [5], [5, 6], [4], [4, 6], [4, 5], [4, 5, 6]]

5. Напишите класс Python, чтобы найти пару элементов (индексы двух чисел) из данного массива, сумма которых равна конкретному целевому числу. — Перейти к редактору
Ввод: цифры = [10,20,10,40,50,60,70], цель = 50
Выход: 3, 4

6. Напишите класс Python, чтобы найти три элемента, которые суммируют до нуля из набора из n действительных чисел. — Перейти к редактору
Входной массив: [-25, -10, -7, -3, 2, 4, 8, 10]
Выход: [[-10, 2, 8], [-7, -3, 10]]

7. Напишите класс Python для реализации pow (x, n). — Перейти к редактору

8. Напишите класс Python, чтобы поменять строку слово за словом. — Перейти к редактору
Входная строка: ‘привет. Py’
Ожидаемый результат: ‘.py hello’

9. Напишите класс Python, который имеет два метода get_String и print_String. get_String принимает строку от пользователя и print_String печатает строку в верхнем регистре. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

10. Напишите класс Python с именем Rectangle, построенный по длине и ширине, и метод, который будет вычислять площадь прямоугольника. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

Читайте также:  Website designing with html and css

11. Напишите класс Python с именем Circle, построенный по радиусу, и два метода, которые будут вычислять площадь и периметр круга. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

12. Напишите программу на Python, чтобы получить имя класса экземпляра в Python. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

Редактор кода Python:

Еще не все !

Не отправляйте решение вышеупомянутых упражнений здесь, если вы хотите внести вклад, перейдите на соответствующую страницу упражнения.

Источник

[ Сборник задач ]Тема 13. Классы и объекты

Рассмотрим специфику ООП в Python, структуру класса и вызов его экземпляров. Определим особенности методов и свойств классов. Ознакомимся с основными магическими методами ( __str__ , __repr__ , __gt__ , __slots__ и др.). Научимся модифицировать атрибуты в плане приватности доступа к ним.

One

Объектно-ориентированное программирование (ООП) – один из подходов к реализации программного кода для проецирования сущностей реального мира. Считается, что введение классов и объектов упрощает понимание кода человеком. В Питоне все является объектами.

  1. Принципы ООП и их реализация в Python;
  2. Свойства и методы классов;
  3. Инициализация экземпляров классов;
  4. Получение и задание свойств через декораторы;
  5. Классовые и статические методы;
  6. Магические ( dunder или magic ) методы классов;
  7. Модификаторы доступа к методам и свойствам;
  8. Дескрипторы.

Читайте также

Поговорим про основные принципы объектно-ориентированного программирования: абстракцию, инкапсуляцию, наследование и полиморфизм. Научимся создавать классы и объекты классов в Python. Рассмотрим, чем отличаются понятия поля, свойства, методы и атрибуты класса. Изучим особенности организации уровней доступа к атрибутам: Public, Protected и Private.

Two

Классы – шаблоны ( blueprint ) конкретных объектов, т.е. на их основе создаются экземпляры, наследующие свойства и методы родителей.

ООП в языке Python базируется на следующей иерархии:
1. Имеется головной класс object() , являющийся основой для всех других (обычно, его явно не указывают);
2. Уровнем ниже расположены метаклассы , классы и подклассы (как самого Питона, так и пользовательские);
3. В результате получаем возможность создавать любое количество экземпляров классов, т.е. объектов.

А вообще говоря — все в Питоне является объектом (даже класс). Это просто нужно запомнить.

Так как на основе классов создаются конкретные объекты, необходима возможность получения доступа к каждому из них. Ключевое слово self обозначает текущий объект класса. Это некая договоренность (так как self никто не запрещает заменить на любое другое слово).

  1. В качестве первого аргумента у методов экземпляра класса;
  2. Для доступа к свойству объекта внутри класса.

Результат выполнения

Привет, Дмитрий

  1. Методы экземпляров (наиболее часто используемые, в качестве первого аргумента всегда принимают self );
  2. Классовые методы (здесь первым параметром передается cls . Привязаны к данному классу, а не к его экземплярам. Способны менять состояние класса, но не его экземпляров);
  3. Статические методы (не требуют наличия особого первого аргумента. Фактически, не принадлежат никакому классу, а представляют собой независимую функцию, которую мы решили по причинам бизнес-логики включить в класс).

Пример – IDE

class Person:

____def __init__(self, name):
________self.name = name

____@staticmethod
____def status(year_of_birth):
________if 2021 — year_of_birth >= 18:
____________print(‘Вы можете смотреть все страницы сайта’)
________else:
____________print(‘Часть страниц вам не доступна’)

student = Person(‘Петр’)
# Тесты
student.status(1991)
Person.status(2011)

Результат выполнения

Вы можете смотреть все страницы сайта
Часть страниц вам не доступна

Фактические, метод status() никто не мешает нам вынести за рамки класса, но мы его тут разместили для изоляции и удобства.

Наследование – один из основных принципов ООП. Его суть выражается в следующем: на основании одних классов (базовых, суперклассов) можно создавать другие (подклассы), наследующие их свойства и методы.

  1. Нет нужды переписывать одни и те же методы и свойства у разных объектов;
  2. Методы и свойства наследников не запрещено дополнять или модифицировать.

Пример – IDE

class Bird:

____def __init__(self, age, fly_distance):
________self.age = age
________self.fly_distance = fly_distance

____def fly(self):
________print(f»Птица может пролететь за раз километров: «)

____def human_age(self):
________print(f’Этой птице человеческих лет’)

____def __init__(self, age, fly_distance, sound):
________super().__init__(age, fly_distance)
________self.sound = sound

____def human_age(self):
________print(f’Данному воробью человеческих лет’)

____def sing(self):
________print(self.sound)

# Тесты
crow = Bird(11, 5)
crow.fly()
crow.human_age()
young_sparrow = Sparrow(1, 2, ‘чик-чирик’)
old_sparrow = Sparrow(3, 1, ‘чирик-чирик’)
young_sparrow.fly()
young_sparrow.sing()
young_sparrow.human_age()
old_sparrow.human_age()

Результат выполнения

Птица пролетела километров: 5
Этой птице 66 человеческих лет
Птица пролетела километров: 2
чик-чирик
Данному воробью 25 человеческих лет
Данному воробью 75 человеческих лет

Функция super() позволяет ссылаться на родительский суперкласс. Класс Sparrow унаследовал от Bird метод fly() , затем дополнительно мы ему создали собственный метод sound() и изменили метод предка human_age() .

Очень часто переменные, инициализируемые в классе, являются однотипными. Например, есть класс Employee (сотрудник), принимающий параметры: имя, фамилия, отчество, должность. Все они являются строками. Следовательно, прежде чем создать экземпляр класса, нужно проверить, что пользователь ввел строки. А для этого потребуются сеттеры, проверяющие тип вводимых параметров. В итоге, мы 4 раза повторим код проверки. Нарушается принцип DRY ( don’t repeat yourself ).

Для таких ситуаций удобно использовать дескрипторы (они, к слову, широко применяются во фреймворке Django при создании моделей).

Дескриптор — такой атрибут объекта, поведение которого переопределяется специальными методами. Проще говоря, доступ к какому-то свойству экземпляра можно переопределить с учетом дополнительных проверок. Если делать эти верификации без дескрипторов, то один и тот же код начнет повторяться.

  1. __get__() — получить значение свойства;
  2. __set__() — задать значение;
  3. __delete__() — удалить атрибут;
  4. __set_name__() — присвоить имя свойству (появился в Питоне версии 3.6).

Покажем использование дескрипторов на вышеупомянутом примере.

Пример – IDE

# Создаем класс с протоколами дескриптора
class StringChecker:

____# Получаем доступ к свойству
____def __get__(self, instance, owner):
________if instance is None:
____________return self
________return instance.__dict__[self.name]

____# Меняем свойство
____def __set__(self, instance, str_value):
________if not isinstance(str_value, str):
____________raise ValueError(‘Нужно предоставить строку’)
________elif len(str_value) < 2:
____________raise ValueError(‘Необходимо минимум 2 буквы’)
________instance.__dict__[self.name] = str_value

____# Задаем имя свойства
____def __set_name__(self, owner, name):
________self.name = name

____# Определяем атрибуты (их может быть любое количество)
____name = StringChecker()
____surname = StringChecker()
____patronymic = StringChecker()
____post = StringChecker()

____# Инициализируем свойства с учетом требуемых проверок
____def __init__(self, name, surname, patronymic, post):
________self.name = name
________self.surname = surname
________self.patronymic = patronymic
________self.post = post

# Тесты
director = Employee(‘Иван’, ‘Николаевич’, ‘Прогин’, ‘Директор’)
print(director.__dict__)
director.name = 1
director.name = ‘A’

Результат выполнения


ValueError: Нужно предоставить строку
ValueError: Минимум две буквы в атрибуте требуется

Источник

Класс Python — Упражнения, практика, решение

3. Напишите класс Python, чтобы найти правильность строки скобок, ‘(‘, ‘)’, », ‘[‘ и ‘]. Эти скобки должны быть закрыты в правильном порядке, например, «()» и «() [] <>» допустимы, но «[)», «(

4. Напишите класс Python, чтобы получить все возможные уникальные подмножества из набора различных целых чисел. — Перейти к редактору
Вход: [4, 5, 6]
Вывод: [[], [6], [5], [5, 6], [4], [4, 6], [4, 5], [4, 5, 6]]

5. Напишите класс Python, чтобы найти пару элементов (индексы двух чисел) из данного массива, сумма которых равна конкретному целевому числу. — Перейти к редактору
Ввод: цифры = [10,20,10,40,50,60,70], цель = 50
Выход: 3, 4

6. Напишите класс Python, чтобы найти три элемента, которые суммируют до нуля из набора из n действительных чисел. — Перейти к редактору
Входной массив: [-25, -10, -7, -3, 2, 4, 8, 10]
Выход: [[-10, 2, 8], [-7, -3, 10]]

7. Напишите класс Python для реализации pow (x, n). — Перейти к редактору

8. Напишите класс Python, чтобы поменять строку слово за словом. — Перейти к редактору
Входная строка: ‘привет. Py’
Ожидаемый результат: ‘.py hello’

9. Напишите класс Python, который имеет два метода get_String и print_String. get_String принимает строку от пользователя и print_String печатает строку в верхнем регистре. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

10. Напишите класс Python с именем Rectangle, построенный по длине и ширине, и метод, который будет вычислять площадь прямоугольника. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

11. Напишите класс Python с именем Circle, построенный по радиусу, и два метода, которые будут вычислять площадь и периметр круга. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

12. Напишите программу на Python, чтобы получить имя класса экземпляра в Python. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

Редактор кода Python:

Еще не все !

Не отправляйте решение вышеупомянутых упражнений здесь, если вы хотите внести вклад, перейдите на соответствующую страницу упражнения.

Источник

Оцените статью