• Для чего нужны метаклассы в Python?

    wearyweary
    @wearyweary
    Вечный студент
    Как уже выше написали - метаклассы нужны чтобы в рантайме создавать другие классы. Используется например в ORM, таких как PonyORM/SQLAlchemy чтобы генерировать энтити, которые потом будут отображены на строки в таблицах в базе данных.
    Ответ написан
    Комментировать
  • Как сделать логи в python?

    @Everything_is_bad
    Логи надо делать стандартным модулем logging, а не писать собственные кривые костыли
    Ответ написан
    2 комментария
  • Для чего нужны метаклассы в Python?

    @aleks-th
    https://habr.com/ru/articles/145835/
    Довольно подробно описано в этой статье для чего это нужно.

    Если кратко то метаклассы нужны чтобы налету создавать классы.
    Ответ написан
    Комментировать
  • Как правильно аннотировать словарь Python?

    Vindicar
    @Vindicar
    RTFM!
    Варианты 1 и 2 ссылаются на вполне конкретный класс dict. Когда typing только ввели, стандартынй dict не поддерживал такую запись, поэтому создали псевдоним typing.Dict. Потом к этому типу (а также к tuple и list) прикрутили возможность вести себя как генерик. Сейчас Dict, List и Tuple потихоньку планируют выводить из употребления. Они deprecated начиная с питона 3.9.
    Вариант 3 - это любой объект, который ведёт себя как словарь, не обязательно именно dict. Но с 3.9 это алиас для collections.abc.Mapping, по той же самой причине.

    Так что вариант 2 и 3 имеет смысл, только если тебе нужно поддерживать питон 3.8 и младше.
    Выбор между вариантом dict и collections.abc.Mapping зависит от того, что именно тебе нужно - вот прямо dict, или просто что-то словареподобное. См. список методов Mapping тут.
    Ответ написан
    1 комментарий
  • Как сделать связь между сервером и десктоп программой?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Связь осуществляется через сетевое соединение, а именно через сокеты и кучу разных протоколов поверх типа HTTP/WS и прочего. На стороне сервера реализуете выбранный вами протокол в виде сервиса API, который слушает сокет, а в десктопном приложении подключаетесь к серверу и взаимодействуете с API вашего сервиса.
    Ответ написан
    Комментировать
  • Для чего в интерпретаторе python параметр -m?

    @alekssamos
    Программист любитель
    Есть модули, это как пакеты, только вместо __init__.py там __main__.py и в отличие от пакетов это уже готовые консольные программы.
    Отличия?
    Скрипт - один файл,
    модуль - множество связанных между собой файлов, лежащих в определённой папке,
    выполняющих одну задачу.
    Ответ написан
    Комментировать
  • Как работает асинхронность в пайтон?

    Vindicar
    @Vindicar
    RTFM!
    asyncio - это, скорее, как обойтись без многопоточности.
    Она хорошо работает для ситуаций, когда большая часть времени потока выполнения уходит на ожидание ввода-вывода - например, на ответ по сети. Если у тебя есть что-то, что занимает CPU, или любая другая операция, выполняемая вне рамок ввода-вывода через asyncio - это остановит выполнение асинхронной программы.
    Если на пальцах, то асинхронная программа состоит из отдельных корутин. Разница с потоками в том, что потоки переключает ОС, а корутины сами отдают управление, когда уходят в ожидание события (грубо говоря, когда делают вызов с await). Это упрощает синхронизацию корутин, так как ты точно знаешь, когда твоя корутина отдаст управление - меньше шансов налететь на состояние гонки из-за внезапного переключения. Опять же, переключение корутин куда более детерминировано, чем переключение потоков, так что "плавающие" баги встречаются реже.
    Тело асинхронной программы - это рабочий цикл (т.н. реактор, он же loop), который проверяет выполняемые операции ввода-вывода, и возобновляет выполнение корутины, когда её операция завершилась. Когда корутина завершится или запланирует ещё одну операцию, она вернёт управление в цикл. Вот почему "задумавшаяся" корутина остановит всю программу.
    Минус в том, что в отличие от многопоточности, нельзя просто вжжжжжжух и сделать код асинхронным. Он должен писаться как асинхронный с самого начала, с прицелом на исполнение в реакторе.
    Ответ написан
    2 комментария
  • Как правильно подключать новое приложение?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    А чем не устраивает официальное описание? Далее мой вольный перевод:

    Чтобы сконфигурировать приложение, создайте модуль apps.py внутри приложения, затем определите тут класс - инстанс AppConfig.
    Когда INSTALLED_APPS содержит путь отделенный точками к модулю приложения, по умолчанию, если Django находит только один инстанс класса AppConfig в модуле apps.py, он использует эту конфигурацию для приложения. Это поведение можно отключить установкой AppConfig.default в False.

    Если модуль apps.py содержит более одного инстанса класса AppConfig, Django будет использовать тот, в котором AppConfig.default будет установлен в True.

    Если никаких инстансов AppConfig не будет найдено, будет использован базовый AppConfig.

    Как вариант, INSTALLED_APPS может содержать путь отделенный точками к классу, чтобы указать его явно:

    INSTALLED_APPS = [
        ...
        'polls.apps.PollsAppConfig',
        ...
    ]



    Сам Django использует по умолчанию путь до приложения:
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
    ...


    а не
    INSTALLED_APPS = [
        'django.contrib.admin.apps.AdminConfig',
        'django.contrib.auth.apps.AuthConfig',
    ...


    Поэтому если вам не нужно указывать по какой-то причине путь к инстансу AppConfig приложения явно - то можно ограничиться только путем к приложению.
    Ответ написан
    Комментировать
  • Что означает строка c @@ в логах Git?

    Lynn
    @Lynn
    nginx, js, css
    https://ru.m.wikipedia.org/wiki/Diff
    Раздел Универсальный формат
    Ответ написан
    Комментировать
  • Как получить доступ к Django приложению из Docker?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    как минимум - так запускать надо:
    python3 manage.py runserver 0.0.0.0:8000
    иначе джанго слушает локалхост у себя внутри контейнера
    Ответ написан
    1 комментарий
  • Какие есть аргументы ctx.author (discord.py)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Видимо, речь не про аргументы, а про атрибуты.
    Аргументы есть у функций и методов, это то, что передаётся функции в скобочках.
    То, что вы показали, это атрибуты. Посмотреть список атрибутов можно командойprint(dir(obj))
    При этом отобразятся все атрибуты объекта obj в виде списка (list).
    spoiler
    Если запустить dir() без аргументов, то получите список доступных имен, видимых в данной области видимости имен.
    a = 1
    print(dir())


    spoiler
    Рекомендую ознакомиться с языком на более простых примерах, нежели бот. Боты - довольно сложная штука, и учиться на ботах всё равно, что учиться на хирурга сразу на операциях на сердце. Начните с латыни, биохимии и анатомии.
    Ответ написан
    2 комментария
  • Как написать веб-приложение для работы с файлами?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://pythonru.com/primery/django-celery

    делай на редисе

    но подвохи там тоже будут )) в любом случае Celery для резюме it must
    Ответ написан
    Комментировать
  • Как сделать динамическое количество Q запросов?

    @gimntut
    Untiwe я доработал твой код.
    Вся хитрость в 2х звёздочках **
    def get_queryset(self):
            if not self.request.GET:
                return Posts.objects.all()#если нет параметров, просто возвращаем все посты
            keyword = self.request.GET.get('key')#получаем ключевое слово
            filters = Q()#создаем первый объект Q, что бы складывать с ним другие
            for key in ['author', 'name', 'text']:
                    value = self.request.GET.get(key)
                    if value:
                            filters |= Q(**{f'{key}__icontains': keyword})
            return Posts.objects.filter(filters)
    Ответ написан
    2 комментария