Ответы пользователя по тегу Python
  • Как правильно перегрузить коструктор?

    Вы спрашиваете как написать конструктор, чтобы он делал то, что он сейчас делает? Ничего не меняйте и он будет работать так, как вы просите.

    Но, сравнивать args с True странно, у них типы разные и выражение будет всегда ложно. Надо писать вот так:
    if args:
    Т.е. воспользоваться неявным приведением к булевской переменной. Сравнивать так, как предлагают в другом комментарии: if args[0] скорее всего нельзя т.к. этот код требует наличия одного позиционного аргумента и проверяет его.

    Остальной код тоже странный. Вот это:
    self.start_urls = ['%s' % args]
    формирует список из одной строки, в которой будет первый позиционный аргумент. Не список строк, а только одну. И только с первый аргументом, а не со всеми.
    Ответ написан
    Комментировать
  • Глобальный импорт модулей в Python

    Названия, начинающиеся с _ считаются приватными. Они не импортируются, когда вы пишите from module import *. Это продуманная и специально сделанная фича. Так что решение очевидно: не надо давать не приватным модулям имена, начинающиеся с _. Если имя модуля поменять нельзя, то в parent.py надо писать:
    import _mysql as mysql

    Тогда не надо будет писать
    __all__ = ['_mysql']
    Ответ написан
  • Как обойти отсутствие транзакций в MongoDB?

    — передача денег от А к В с проверками и откатами;

    Просто не надо использовать mongodb для этого. Не получится. mongo написана для хранения не ценных данных, потери которых мало кого интересуют. Поэтому, например, mongo по-умолчанию сразу возвращает успех, не дожидаясь записи в базу.
    — покупка товара (уходит со склада и приходит пользователю в заказы, причем так, чтобы 2 пользователя не купили последний товар со склада, а владелец товара не успел изменить цену, пока пользователь покупал (условно говоря лок на товар))

    Это скорее всего можно сделать атомарными операциями. Но если надо, локи организуются с помощью поля «заблокирован до», уникального индекса на id товара и запросов вида
    upsert(«объект с установленным полем времени блокировки», «время блокировки меньше текущего времени»)
    Если лока еще нет, то он будет создан. Если лок есть но просрочен (захвативший его процесс упал), то запрос обновит такую запись. Если лок захвачен, то запрос попытается создать новый lock, но упадет из-за дубликата ключа в индексе.
    Ответ написан
    Комментировать
  • Как определить входит ли геоточка(с широтой, долготой) в радиус?

    Не с этого надо начинать. Каковы требования по точности и скорости работы алгоритма? Много ли точек надо проверять на вхождение в одну окружность? Все ла равно вам на сплющенность Земли, а также на рельеф? Понимаете ли вы, что окружность на карте не будет выглядеть, как окружность?
    Ответ написан
    Комментировать