Главное про технологии, интернет-культуру, тренды и нейросети.
По рекламе: @Alivian
Биржа: https://telega.in/c/technomotel
Last updated 3 days, 8 hours ago
?Телеграмдаги Энг сўнгги хит тароналар факат бизда
?? - УЗ
?? - РУ
?? - ТР
?? - Ус
?? - АЗ
?? - ТЖ
?? - КЗ
?? - КР
Creator : @kiinyaz
Last updated 1 year, 1 month ago
Бесплатные игры и программы для Android
❗️Сотрудничество (ads), DMCA, пожелания: t.me/EasyAPKBot
💵Реклама: https://telega.in/c/EasyAPK
🔴 Чат: @ChatEasyAPK
Все публикуется в ознакомительных целях. Вы скачиваете программы на свой страх и риск
Last updated 11 months ago
докер и микросервисы это залупа конченая, а фирмы которые это используют просто страдают “shiny new framework syndrome”.
Change my mind.
Мда, если даже здесь всё не так однозначно... Ладно, вот вам ещё один спорный тезис. Кто-то в обсуждениях заметил, что некоторые программерские инструменты будто бы специально сделаны сложными в использовании. Например, те же СУБД (почему-то не люблю это слово).…
Хотел чет еще вкинуть по логгированию или юнит тестам, но увы не успел. Итоги подводить не буду, сами для себя думаю уже все это сделали. Так что, без лишний предисловий, с нг. ?
Ну и напоследок еще один немаловажный момент, связанный с датаклассами. Иногда нам в таком классе нужна чисто классовая переменная (сори за масло масляное, cls var). Рассмотрим на примере с датаклассами и без.
Создание переменной класса
Без датакласса мы бы написали так
```
class User:
cvar: float = 0.5
def \_\_init\_\_(self, user\_id: int, name: str) \-> None:
self.user\_id = user\_id
self.name = name
```
Используя датакласс мы бы написали так
```
from typing import ClassVar
@dataclass
class User:
cvar: ClassVar[float] = 0.5
user\_id: int = field(default\_factory=my\_super\_ultra\_id\_func)
name: str = field(default="")
```
В последнем примере вернул поля и для user_id
и для name
, поскольку именованый cvar
должен был бы по идее идти после них, но я оставил его в начале.
Здесь в принципе без детальных пояснений. С typing
наверняка все знакомы, если на норм проектах пишете... Как я и говорил, датаклассы абузят понятие классовой переменной, и базовый синтаксис в классах, но зато взамен вы получаете множество уже реализованных "под капотом" методов для работы с данными. В целом, справедливый обмен. Если остались какие то вопросы, в доке все довольно хорошо объяснено, и всегда можно заглянуть туда.
Дрочим датаклассы v 2.0 ??
Приветствую, дорогие читатели! Ваш любимый шизоид снова выходит на связь. В этом посте мы закончим разбирать датаклассы (надеюсь). В прошлом посте я не осветил такой интересный вопрос, как "зачем же все-таки они нужны?". Поясняю: вам необходимо создавать датаклассы в первую очередь для хранения и управления данными (как и следует из их названия). Либо, если вы хотите упростить себе задачу и писать меньше кода, воспользовавшись автоматической генерацией некоторых методов: __init__
, __repr__
, etc.
У нас в проектах это много где используется, в основном для упрощения управления и хранения различного рода данных.
Исключение аргументов из __init__
Рассмотрим пример, когда нам нужно убрать аргумент из инициализатора, например user_id
, который нам должен генерироваться автоматически. Для этого в аргумент добавим init=False
.
```
import random
def my_super_ultra_id_func() -> int:
return random.randint(0, 1000)
@dataclass
class User:
user_id: int = field(init=False, default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list)
```
Используем __post_init__
для создания полей
Иногда нам необходимо например добавить переменную, которая будет являться комбинацией других. Для этого воспользуемся методом __post_init__
.
```
@dataclass
class User:
user_id: int = field(default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list, repr=False)
search_string: str = field(init=False)
def \_\_post\_init\_\_(self) \-> None:
self.search\_string = f"{self.user\_id}: {self.name}"
user = User(user_id=1, name="hw_code", is_active=False, email_addresses=["[email protected]"])
```
Выведет:
```
User(user_id=1, name='hw_code', is_active=False, search_string='1: hw_code')
```
Private/protected
Абсолютно аналогично созданию private/protected переменной в обычном классе. Просто добавляем _ перед именем.
```
\_search\_string: str = field(init=False)
```
Read only поля датакласса
Допустим мы хотим сделать так, чтобы после инициализации значения полей нельзя было поменять. По умолчанию, когда мы используем декоратор @dataclass
, значение аргумента frozen
в нем равно False
. Чтобы сделать "заморозить" поля датакласса, меняем это значение на True
.
```
@dataclass(frozen=True)
class User:
user_id: int = field(default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list, repr=False)
search_string: str = field(init=False)
def \_\_post\_init\_\_(self) \-> None:
self.search\_string = f"{self.user\_id}: {self.name}"
```
Теперь после инициализации мы не сможем изменить значения полей:
```
user = User(user_id=1, name="hw_code", is_active=False, email_addresses=["[email protected]"])
user.name = "Big Dick" # ошибка
```
kw_only
аргумент
Указывая этот аргумент мы можем вынудить программиста, использующего наш датакласс, использовать только именованые аргументы при инициализации.
```
@dataclass(kw_only=True)
class User:
user_id: int = field(default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list, repr=False)
search_string: str = field(init=False)
def \_\_post\_init\_\_(self) \-> None:
self.search\_string = f"{self.user\_id}: {self.name}"
# сработает
user = User(user_id=1, name="hw_code", is_active=False, email_addresses=["[email protected]"])
# не сработает
user = User(1, "hw_code", False, ["[email protected]"])
```
Ну че, все готовы к началу рабочей недели? ???
Главное про технологии, интернет-культуру, тренды и нейросети.
По рекламе: @Alivian
Биржа: https://telega.in/c/technomotel
Last updated 3 days, 8 hours ago
?Телеграмдаги Энг сўнгги хит тароналар факат бизда
?? - УЗ
?? - РУ
?? - ТР
?? - Ус
?? - АЗ
?? - ТЖ
?? - КЗ
?? - КР
Creator : @kiinyaz
Last updated 1 year, 1 month ago
Бесплатные игры и программы для Android
❗️Сотрудничество (ads), DMCA, пожелания: t.me/EasyAPKBot
💵Реклама: https://telega.in/c/EasyAPK
🔴 Чат: @ChatEasyAPK
Все публикуется в ознакомительных целях. Вы скачиваете программы на свой страх и риск
Last updated 11 months ago