Предупреждения Депрекации Python с Моносостоянием __ новый __ — кто-то может объяснить почему?

Я не думаю, что существует "правильный" ответ. Кажется пониманием включенных компромиссов, и просто необходимо сделать дизайн вокруг тех.

Несколько дополнительных случайных точек: иногда Ваше приложение вызывает конкретный подход. Например, многие из удобства (т.е. синхронный) методы не позволят аутентификацию. Для меня, который подразумевал, что мое решение было принято.

Для Вкусный я закончил не потоки использования. Я выполнил все свои асинхронные сетевые вызовы, и я использовал синтаксический анализатор XML по умолчанию (который работает с помощью спин вызова). Так как это все управляемо событиями, и каждая единица является небольшой, это позволяет GUI быть довольно жидким, не имея сложности поточной обработки.

я использую конечный автомат для выяснения, почему я получаю конкретный ответ и очередь так, чтобы я только перенес единственную операцию "в полете" в любой момент времени. Существует ясный приказ к большинству запросов, таким образом, у меня нет потребности в системе с приоритетом.

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

5
задан rh0dium 19 October 2009 в 19:04
поделиться

2 ответа

Предупреждение возникает из-за того, что __ new __ () может ИМЕТЬ аргументы, но поскольку они везде игнорируются, передача ему аргументов (кроме cls) вызывает предупреждение . На самом деле (в настоящее время) передача дополнительных аргументов не является ошибкой, но они не действуют.

В py3k передача аргументов станет ошибкой.

1
ответ дан 14 December 2019 в 08:55
поделиться

См. python-singleton-object-instantiation и обратите внимание на пример синглтона Alex Martelli :

class Singleton(object):

    __instance = None

    def __new__(cls):
        if cls.__instance == None:
            __instance = type.__new__(cls)
            __instance.name = "The one"
        return __instance

__ new__ устаревание на вопрос ответил Гвидо :

Сообщение означает именно то, что в нем говорится. :-) Нет смысла звонить object .__ new __ () с более чем параметром класса и любым кодом, который сделал это, просто сбросил эти аргументы в черную дыру.

Единственный раз, когда для object .__ new __ () имеет смысл игнорировать лишние аргументы - это когда он не переопределяется, но __init__ - это переопределено - тогда у вас есть полностью заданный по умолчанию __new__ и проверка аргументов конструктора отнесена к __init __.

Цель всего этого - отловить ошибку в вызове типа объект (42), который (снова) передает аргумент, который не используется. Это часто является признаком ошибки в вашей программе.

- Guido

6
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: