Сурен, все как всегда круто! На мой взгляд ты единственный блогер в РФ кто так все хорошо и доходчиво объясняешь. Вот бы ментера такого) Еще раз спасибо тебе)
@SurenKhorenyanАй бұрын
@@robdiez671 пожалуйста! Очень приятно, спасибо 🥰 Рад, что вам нравится и понятно 😊
@captainkryuk189929 күн бұрын
Красава, классное видео
@SurenKhorenyan29 күн бұрын
@@captainkryuk1899 спасибо! Очень приятно 🥰
@ShugarDaddyАй бұрын
Сурен, ты молодец, снимаешь видео по действительно интересным темам. Жду подробный разбор метаклассов😁
@SurenKhorenyanАй бұрын
@@ShugarDaddy спасибо! Рад, что вам понравилось 🥰 Когда-нибудь и про метаклассы поговорим 😊
@zifrit755Ай бұрын
Если не ошибаюсь то с 3.11 или с 3.12 писать TypeVar не обязательно, что через квадратные скобки можно передавать. К примеру: class ModelManager[Base: BaseModel](): def __init__(self, model: type[Model]): self._model = model что является аналогом: T = TypeVar("T", bound=BaseModel) class ModelManager(Generic(T)): def __init__(self, model: type[BaseModel]): self._model = model Так же с классами работает: def test[T](t: T): return t Если где ошибка, то подскажите ) Видно было интересным, сам не давно только начал про это изучать и твое видео помогло некоторые моменты прояснить. Надеюсь будет видео и про новый способ работы с Generic ; )
@SurenKhorenyanАй бұрын
@@zifrit755 спасибо! Да, с 3.12 новый синтаксис ввели. Про это ролик уже готов, опубликую в этом году По вашему коду в целом ок, ошибок с первого взгляда не вижу
@IsNotProgrammerАй бұрын
Неплохой обзор, но на 17:00 сомнительный кейс, в плане интерфейса) Думаю одним из лучших примеров дженериков является repo классы для разных таблиц БД
@SurenKhorenyanАй бұрын
Любопытно, что я уже в чате встречал упоминание repo классов. У вас есть примеры такого кода? Покажете? Можете в телеграм чат закинуть
@antonzuzlov2046Ай бұрын
Спасибо за видос, интересно какой AI для автодополнения сейчас используешь?
@SurenKhorenyanАй бұрын
Пожалуйста! Это встроенный оффлайн автокомплит, в настройках Full Line Completion
@antonzuzlov204624 күн бұрын
@@SurenKhorenyan что-то у меня не получилось это настроить, насколько я понял это в jetbrains AI assistant? платная штука?
@SurenKhorenyan24 күн бұрын
@@antonzuzlov2046 нет, это оффлайн. Локальная простенькая модель. В чате в тг скидывал скриншот
@antonzuzlov204624 күн бұрын
@@SurenKhorenyan или может это в про версии? у меня СЕ
@SurenKhorenyan24 күн бұрын
@@antonzuzlov2046 это точно только в про версии. Переходите на неё. В чате периодически скидывают ссылку как забрать по скидке. Пользуйтесь
@xewuss3750Ай бұрын
from typing import TypeVar, Generic L = TypeVar("L", bound="Line") class Line(Generic[L]): other: L | None = None @classmethod def make_pair(cls: type[L]) -> tuple[L, L]: left: L = cls() right: L = cls() left.other = right right.other = left return left, right class FizzLine(Line["FizzLine"]): def fizz(self) -> str: return f"Other fizz: {self.other}"
@SurenKhorenyanАй бұрын
@@xewuss3750 оо, любопытный вариант, надо будет проверить, как mypy на это смотрит. Я другое решение покажу в одном из грядущих роликов. Тоже нашёл способ
@AlexAlex-ui5gzАй бұрын
Сурен, а как провернуть фокус, где всё ссылается на друг друга, но нужно распихать всё по разным папкам и не получить цикличность импорта?
@SurenKhorenyanАй бұрын
@@AlexAlex-ui5gz если это только для аннотаций, то под if TYPE_CHECKING сложить. Приходите в тг чат, там подскажут
@AlexAlex-ui5gzАй бұрын
@SurenKhorenyan , например Foo принимает екземпляр Bar, а Bar принимает экземпляр Foo, и всё это в разных файлах, а инициализация в файле main))))
@AlexAlex-ui5gzАй бұрын
@@SurenKhorenyan Это же python, должно быть элегантное решение, я пример проблемы скинул в сообщении выше.
@SurenKhorenyanАй бұрын
@@AlexAlex-ui5gzа я ещё выше описал решение
@AlexAlex-ui5gz29 күн бұрын
@@SurenKhorenyan благодарю, всё работает)
@balaamsterАй бұрын
Для чего производится замена одинарных кавычек на двойные? Если посмотреть repr какого-нибудь обьекта, то мне чаще попадались одинарные кавычки. В PEP-8 нашел только рекомендацию следовать одному стилю применения кавычек и использовать двойные кавычки для "тройных кавычек". Да и вводить одинарные быстрее, без задействования shift.
@_balancy_Ай бұрын
испльзуется обычно то, что принято в команде. На уровне синтаксиса нет рекомендаций. Но так как black распространен как форматтер, то чаще используются двойные, потому что там нет возможности настроить автоконвертацию в одинарные
@xewuss3750Ай бұрын
В большинстве распространённых языков используются двойные кавычки для строк. Гвидо, наверное решил выделиться с кавычками. А также с None вместо Null.
@SurenKhorenyanАй бұрын
@@balaamster как вы написали, в PEP-8 есть рекомендация по использованию двойных кавычек. Например для docstring Получается, если в коде будет использоваться подход с одинарными кавычками, то будет смесь стилей по проекту. Поэтому я решил, что пусть везде будут двойные кавычки. Исправления автоматически делает black, тратить время на набор не придётся
@_balancy_Ай бұрын
Сурен, у тебя какой ИИ-плагин используется в IDE для автокомплита?
@xewuss3750Ай бұрын
В ПуЧарм встраивали свой. Но скорее всего - за деньги и не в РФ. Есть codeium, неплохо работает.
@SurenKhorenyanАй бұрын
@@_balancy_ это встроенный Full Line Suggestions, включается в разделе autocomplete
@SurenKhorenyanАй бұрын
@@xewuss3750 мне codeium совсем не зашёл
@_balancy_Ай бұрын
@@xewuss3750 я просто copilot юзал некоторое время, но мне не нравится платить и за chatgpt, и за copilot, когда там функции в большинстве дублируются. Думаю codeium попробовать
@yawneedАй бұрын
@@SurenKhorenyan А можно поподробнее где это? В настройках не нашел.
@hectorhwАй бұрын
from typing import Self, reveal_type class Line: other: Self | None = None @classmethod def make_pair(cls: type[Self]) -> tuple[Self, Self]: left = cls() right = cls() left.other = right right.other = left return left, right class FizzLine(Line): def fizz(self) -> str: return f"Other fizz: {self.other}" first, second = FizzLine.make_pair() reveal_type(first.other) # FizzLine | None reveal_type(first.other and first.other.fizz()) # str | None
@SurenKhorenyanАй бұрын
@@hectorhw класс, отличный вариант 🙂 Я именно так и решил. Отдельный ролик сделал про Self Круто, что не я один так придумал 😊