- Декораторы (обёртки) функций в Python
- Yield в Python
- Ключевое слово yield в Python
- Конструктор класса в Python __init__ и __new__: описание и примеры
- Настройка классов Python магическими методами
- Свойства property. Декоратор @property
- Работа с SQLite в Python (для чайников) [Habr]
- Менеджер контекста это просто [Habr]
- Как устроен with
- Как работать с процессами и потоками в Python
- Python в три ручья: работаем с потоками (часть 1)
- #11. Дескрипторы (data descriptor и non-data descriptor) | ООП Python
- Selenium + Python: команды (записки)
@dataclass
Passing default list argument to dataclassesfrom dataclasses import dataclass, field from typing import List
@dataclass
class Pizza():
ingredients: List = field(default_factory=['dow', 'tomatoes']) # <- wrong!
Use a lambda function instead:
@dataclass
class Pizza():
ingredients: List = field(default_factory=lambda: ['dow', 'tomatoes'])
pydantic dataclass
from pydantic.dataclasses import dataclass
@dataclass
class User:
id: int
name: str
user = User(id=123, name="James")
d = asdict(user) # {'id': 123, 'name': 'James'}
user_json = json.dumps(d)
print(user_json) # '{"id": 123, "name": "James"}'
json_raw = '{"id": 123, "name": "James"}'
user_dict = json.loads(json_raw)
user = User(**user_dict)
SOLID: OCP (Open/Closed Principle) — Принцип открытости/закрытости
Легко добавлять новые типы запросов, не изменяя существующий код.
from abc import ABC, abstractmethod
class Run(ABC):
@abstractmethod
def execute(self, text: str):
pass
class GoRun(Run):
def execute(self, text: str):
return print("GO, GO, GO!" + text)
class WalkRun(Run):
def execute(self, text: str):
return print("I'm just Walking!" + text)
class SpeedRun(Run):
def execute(self, text: str):
return print("I'm SPEEDy Gonzales!" + text)
class RunClient:
def __init__(self, run_type: Run):
self.run_type = run_type
def make_run(self, text: str):
return self.run_type.execute(text)
run_my = RunClient(SpeedRun())
run_my.make_run("OCP")
run_my2 = RunClient(WalkRun())
run_my2.make_run("OCP")
def do1():
return 1
def do2():
return 2
def do3():
return 3
didi = {"uno": lambda: do1(),
"duo": lambda: do2(),
"tres": lambda: do3()}
print(didi["uno"]())
print(didi["tres"]())
