Hello World

Description
Be so good that you cannot be ignored. And then, go one step beyond.
Advertising
We recommend to visit

?Телеграмдаги Энг сўнгги хит тароналар факат бизда

?? - УЗ
?? - РУ
?? - ТР
?? - Ус
?? - АЗ
?? - ТЖ
?? - КЗ
?? - КР

Creator : @kiinyaz

Last updated 1 year ago

Бесплатные игры и программы для Android

❗️Сотрудничество (ads), DMCA, пожелания: t.me/EasyAPKBot

💵Реклама: https://telega.in/c/EasyAPK

🔴 Чат: @ChatEasyAPK

Все публикуется в ознакомительных целях. Вы скачиваете программы на свой страх и риск

Last updated 10 months ago

Главное про технологии, интернет-культуру, тренды и нейросети.

По рекламе: @Alivian

Биржа: https://telega.in/c/technomotel

Last updated 5 days, 23 hours ago

2 months, 1 week ago
2 months, 1 week ago

докер и микросервисы это залупа конченая, а фирмы которые это используют просто страдают “shiny new framework syndrome”.

Change my mind.

2 months, 3 weeks ago

Мда, если даже здесь всё не так однозначно... Ладно, вот вам ещё один спорный тезис. Кто-то в обсуждениях заметил, что некоторые программерские инструменты будто бы специально сделаны сложными в использовании. Например, те же СУБД (почему-то не люблю это слово).…

10 months, 3 weeks ago

Хотел чет еще вкинуть по логгированию или юнит тестам, но увы не успел. Итоги подводить не буду, сами для себя думаю уже все это сделали. Так что, без лишний предисловий, с нг. ?

11 months, 1 week ago

Ну и напоследок еще один немаловажный момент, связанный с датаклассами. Иногда нам в таком классе нужна чисто классовая переменная (сори за масло масляное, 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 наверняка все знакомы, если на норм проектах пишете... Как я и говорил, датаклассы абузят понятие классовой переменной, и базовый синтаксис в классах, но зато взамен вы получаете множество уже реализованных "под капотом" методов для работы с данными. В целом, справедливый обмен. Если остались какие то вопросы, в доке все довольно хорошо объяснено, и всегда можно заглянуть туда.

@hw_code

11 months, 1 week ago

Дрочим датаклассы 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]"])

```

Ну че, все готовы к началу рабочей недели? ???

@hw_code

11 months, 1 week ago
11 months, 2 weeks ago
We recommend to visit

?Телеграмдаги Энг сўнгги хит тароналар факат бизда

?? - УЗ
?? - РУ
?? - ТР
?? - Ус
?? - АЗ
?? - ТЖ
?? - КЗ
?? - КР

Creator : @kiinyaz

Last updated 1 year ago

Бесплатные игры и программы для Android

❗️Сотрудничество (ads), DMCA, пожелания: t.me/EasyAPKBot

💵Реклама: https://telega.in/c/EasyAPK

🔴 Чат: @ChatEasyAPK

Все публикуется в ознакомительных целях. Вы скачиваете программы на свой страх и риск

Last updated 10 months ago

Главное про технологии, интернет-культуру, тренды и нейросети.

По рекламе: @Alivian

Биржа: https://telega.in/c/technomotel

Last updated 5 days, 23 hours ago