Python · Синтаксис · Начальный уровень
Основы ООП
Практические задания по основам ООП в Python: создание классов и объектов, атрибуты, методы, __init__, изменение состояния объекта и простое моделирование сущностей.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
__init__ и self
#Распространённые паттерны классов
#Быстрый справочник: основы ООП
#Упражнения:
Класс User с именем.
#class User:
pass
u = User("Alex")
print(u.name)
Решение
class User:
def __init__(self, name):
self.name = name
u = User("Alex")
print(u.name)
# или можно создать метод, который возвращает имя
class User:
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
Класс Car: бренд и год.
#class Car:
pass
Решение
class Car:
def __init__(self, brand, year):
self.brand = brand
self.year = year
c = Car("Toyota", 2020)
print(f"Car: {c.brand}, {c.year}")
# или
class Car:
def __init__(self, brand, year):
self.brand = brand
self.year = year
def __str__(self):
return f"Car: {self.brand}, {self.year}"
c = Car("Toyota", 2020)
print(c)
Счётчик с increment.
#class Counter:
pass
c = Counter(0)
c.increment()
print(c.value)
Решение
class Counter:
def __init__(self, value):
self.value = value
def increment(self):
self.value += 1
c = Counter(0)
c.increment()
print(c.value)
# или так можно: increment может возвращать новое значение
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1
return self.value
Площадь прямоугольника.
#class Rectangle:
pass
r = Rectangle(3, 4)
print(r.area())
Решение
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.area())
# или так можно: площадь сначала сохранить в переменную
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
result = self.width * self.height
return result
Приветствие методом класса.
#class Greeting:
pass
g = Greeting()
print(g.say_hello())
Решение
class Greeting:
def say_hello(self):
return "Hello!"
g = Greeting()
print(g.say_hello())
Проверка совершеннолетия.
#class Person:
pass
p = Person("John", 20)
print(p.is_adult())
Решение
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def is_adult(self):
return self.age >= 18
p = Person("John", 20)
print(p.is_adult())
Пополнение банковского счёта.
#class BankAccount:
pass
acc = BankAccount(100)
acc.deposit(50)
print(acc.balance)
Решение
class BankAccount:
def __init__(self, balance):
self.balance = balance
def deposit(self, amount):
self.balance += amount
acc = BankAccount(100)
acc.deposit(50)
print(acc.balance)
# или так можно: явно не позволять пополнять счёт отрицательной суммой
class BankAccount:
def __init__(self, balance):
self.balance = balance
def deposit(self, amount):
if amount > 0:
self.balance += amount
Конвертация Celsius в Fahrenheit.
#class Temperature:
pass
t = Temperature(0)
print(t.to_fahrenheit())
Решение
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
def to_fahrenheit(self):
return self.celsius * 9 / 5 + 32
t = Temperature(0)
print(t.to_fahrenheit())
Длина сообщения методом.
#class Message:
pass
m = Message("Hello world")
print(m.length())
Решение
class Message:
def __init__(self, text):
self.text = text
def length(self):
return len(self.text)
m = Message("Hello world")
print(m.length())
Таймер с добавлением секунд.
#class Timer:
pass
t = Timer(10)
t.add_time(5)
print(t.seconds)
Решение
class Timer:
def __init__(self, seconds):
self.seconds = seconds
def add_time(self, extra):
self.seconds += extra
t = Timer(10)
t.add_time(5)
print(t.seconds)
Класс Formatter для строк.
#class Formatter():
def __init__(self, string):
pass
def trim(self, length):
pass
def truncate(self, length):
pass
x = Formatter("Эта строка для примера просто используется тут и не имеет другого смысла.")
print(x.trim(15)) # Эта строка[...]
print(x.truncate(15)) # Эта строка для
print(x.string) # Изначальная строка
y = Formatter("Ура у меня получилось!.")
print(y.trim(8)) # Ура[...]
print(y.truncate(3)) # Ура
print(y.string) # Изначальная строка
Решение
class Formatter():
def __init__(self, string):
self.string = string
self.end = "[...]"
def trim(self, length):
return self.string[: length - len(self.end)] + self.end
def truncate(self, length):
if self.string[length] == " ":
return self.string[:length]
return self.string[:length].rsplit(" ", 1)[0]
x = Formatter("Эта строка для примера просто используется тут и не имеет другого смысла.")
print(x.trim(15)) # Эта строка[...]
print(x.truncate(15)) # Эта строка для
print(x.string) # Изначальная строка
y = Formatter("Ура у меня получилось!.")
print(y.trim(8)) # Ура[...]
print(y.truncate(3)) # Ура
print(y.string) # Изначальная строка