Рейтинг  

Яндекс.Метрика
Яндекс цитирования
 

   

Статистика  

Пользователи
7
Материалы
600
Кол-во просмотров материалов
2999963
   


@dataclass

Passing default list argument to dataclasses
from 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"]())


   
   

Login Form