Lesson 10, 11
This commit is contained in:
parent
a1ebc759b7
commit
b0dd1a1373
BIN
flask_web_2.0.pdf
Normal file
BIN
flask_web_2.0.pdf
Normal file
Binary file not shown.
34
lesson_10/code/ya_kube.py
Normal file
34
lesson_10/code/ya_kube.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import random
|
||||||
|
import uuid
|
||||||
|
import datetime
|
||||||
|
from lesson_5.code.db import DICT_DEFENITION_WORD
|
||||||
|
|
||||||
|
class Yakubovich:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def print_menu(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def save_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def end_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def load_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _generate_key(self) -> str:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
game = Yakubovich()
|
||||||
|
game.print_menu()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
32
lesson_10/home_task/task34.py
Normal file
32
lesson_10/home_task/task34.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# todo: Перепишите игру "Поле чудес" на классах.
|
||||||
|
import random
|
||||||
|
import uuid
|
||||||
|
import datetime
|
||||||
|
from lesson_5.code.db import DICT_DEFENITION_WORD
|
||||||
|
|
||||||
|
|
||||||
|
class Yakubovich:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def print_menu(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def save_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def end_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def load_game(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _generate_key(self) -> str:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
game = Yakubovich()
|
||||||
|
game.print_menu()
|
||||||
BIN
lesson_10/manual/oop_i_ii_.pdf
Normal file
BIN
lesson_10/manual/oop_i_ii_.pdf
Normal file
Binary file not shown.
77
lesson_11/code/oop.py
Normal file
77
lesson_11/code/oop.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Инкапсуляция
|
||||||
|
# Метод 1 классика жанра
|
||||||
|
class Config:
|
||||||
|
def __init__(self):
|
||||||
|
self.__store = {}
|
||||||
|
def set_store(self, key, value):
|
||||||
|
if not key in self.__store:
|
||||||
|
self.__store[key] = value
|
||||||
|
def get_store(self, key):
|
||||||
|
if key in self.__store:
|
||||||
|
return self.__store[key]
|
||||||
|
else:
|
||||||
|
raise Exception(f"Нет такого ключа '{key}'")
|
||||||
|
|
||||||
|
cnf = Config()
|
||||||
|
cnf.set_store('db', 'llm')
|
||||||
|
cnf.set_store('host', 'localhost')
|
||||||
|
cnf.set_store('port', '5424')
|
||||||
|
cnf.set_store('user', 'postgres')
|
||||||
|
cnf.set_store('passwd', '123')
|
||||||
|
print(cnf.get_store('db'))
|
||||||
|
print(cnf.get_store('host'))
|
||||||
|
try:
|
||||||
|
print(cnf.get_store('hosts'))
|
||||||
|
except Exception as e:
|
||||||
|
print(e.__repr__())
|
||||||
|
|
||||||
|
|
||||||
|
# Метод 2 дандеры __getattr__ _setattr__
|
||||||
|
class SuperConfig():
|
||||||
|
def __init__(self):
|
||||||
|
self.__store = {}
|
||||||
|
|
||||||
|
def __getattr__(self, key):
|
||||||
|
# print(__store)
|
||||||
|
if key in self.__store:
|
||||||
|
return self.__store[key]
|
||||||
|
else:
|
||||||
|
raise Exception(f"Нет такого ключа '{key}'")
|
||||||
|
|
||||||
|
def __setattr__(self, key, value):
|
||||||
|
if key == '_SuperConfig__store':
|
||||||
|
print(key)
|
||||||
|
self.__dict__[key] = value
|
||||||
|
return None
|
||||||
|
if not key in self.__store:
|
||||||
|
self.__store[key] = value
|
||||||
|
else:
|
||||||
|
raise Exception(f"Ключ уже существует '{key}'")
|
||||||
|
|
||||||
|
cnf = SuperConfig()
|
||||||
|
cnf.db = "llm"
|
||||||
|
cnf.host = "localhost"
|
||||||
|
print(cnf.db)
|
||||||
|
print(cnf.host)
|
||||||
|
print(cnf.__dict__)
|
||||||
|
|
||||||
|
# Метод 3 property
|
||||||
|
class DB:
|
||||||
|
def __init__(self, namedb, host, port ):
|
||||||
|
self.__namedb = namedb
|
||||||
|
self.__host = host
|
||||||
|
self.__port = port
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.__namedb} {self.__host} "
|
||||||
|
|
||||||
|
@property
|
||||||
|
def namedb(self):
|
||||||
|
return self.__namedb
|
||||||
|
|
||||||
|
@namedb.setter
|
||||||
|
def namedb(self, value):
|
||||||
|
self.__namedb = value
|
||||||
|
|
||||||
|
my_db = DB('llm', '127.0.0.1', 5424)
|
||||||
|
print(my_db.namedb)
|
||||||
15
lesson_11/home_task/task35.py
Normal file
15
lesson_11/home_task/task35.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Инкапсуляция и property
|
||||||
|
# todo: Класс "Температура"
|
||||||
|
# Создайте класс Temperature, который хранит температуру в градусах Цельсия.
|
||||||
|
# Добавьте свойство для получения и установки температуры в Фаренгейтах и Кельвинах.
|
||||||
|
# Внутренне температура должна храниться только в Цельсиях.
|
||||||
|
|
||||||
|
# celsius (get, set) - работа с Цельсиями.
|
||||||
|
# fahrenheit (get, set) - при установке конвертирует значение в Цельсии.
|
||||||
|
# kelvin (get, set) - при установке конвертирует значение в Цельсии.
|
||||||
|
|
||||||
|
# Пример использования
|
||||||
|
t = Temperature(25)
|
||||||
|
print(f"{t.celsius}C, {t.fahrenheit}F, {t.kelvin}K")
|
||||||
|
t.fahrenheit = 32
|
||||||
|
print(f"После установки 32F: {t.celsius}C")
|
||||||
14
lesson_11/home_task/task36.py
Normal file
14
lesson_11/home_task/task36.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Инкапсуляция и property
|
||||||
|
# todo: Класс "Пользователь" (Валидация email)
|
||||||
|
# Создайте класс User. У него должны быть свойства email и password.
|
||||||
|
# При установке email проверяйте, что строка содержит символ @ (простая валидация).
|
||||||
|
# При установке пароля, храните не сам пароль, а его хеш (для простоты можно использовать hash()).
|
||||||
|
# Сделайте метод check_password(password), который проверяет, соответствует ли хеш переданного
|
||||||
|
# пароля сохраненному хешу.
|
||||||
|
|
||||||
|
# Пример использования
|
||||||
|
user = User("test@example.com", "secret")
|
||||||
|
print(user.email) # test@example.com
|
||||||
|
# print(user.password) # AttributeError
|
||||||
|
print(user.check_password("secret")) # True
|
||||||
|
print(user.check_password("wrong")) # False
|
||||||
12
lesson_11/home_task/task37.py
Normal file
12
lesson_11/home_task/task37.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Инкапсуляция и property
|
||||||
|
# todo: Класс "Товар" (Защита от отрицательной цены)
|
||||||
|
# Создайте класс Product. У него есть свойства name (простая строка) и price.
|
||||||
|
# При установке цены проверяйте, что она не отрицательная.
|
||||||
|
# Если пытаются установить отрицательную цену, устанавливайте 0.
|
||||||
|
|
||||||
|
|
||||||
|
# Пример использования
|
||||||
|
product = Product("Book", 10)
|
||||||
|
print(product.price) # 10
|
||||||
|
product.price = -5
|
||||||
|
print(product.price) # 0
|
||||||
13
lesson_11/home_task/task38.py
Normal file
13
lesson_11/home_task/task38.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Композиция и вычисляемые свойства
|
||||||
|
# todo: Класс "Заказ"
|
||||||
|
# Создайте класс Order (Заказ). Внутри он хранит список экземпляров Product (из предыдущей задачи 37).
|
||||||
|
# Реализуйте свойство total_price, которое вычисляет общую стоимость заказа на основе цен всех товаров
|
||||||
|
# в списке. Реализуйте методы add_product(product) и remove_product(product) для управления списком.
|
||||||
|
|
||||||
|
# Пример использования
|
||||||
|
book = Product("Book", 10)
|
||||||
|
pen = Product("Pen", 2)
|
||||||
|
order = Order()
|
||||||
|
order.add_product(book)
|
||||||
|
order.add_product(pen)
|
||||||
|
print(f"Общая стоимость: {order.total_price}") # 12
|
||||||
BIN
lesson_11/manual/oop_i_ii_.pdf
Normal file
BIN
lesson_11/manual/oop_i_ii_.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user