Я не думаю, что существует "правильный" ответ. Кажется пониманием включенных компромиссов, и просто необходимо сделать дизайн вокруг тех.
Несколько дополнительных случайных точек: иногда Ваше приложение вызывает конкретный подход. Например, многие из удобства (т.е. синхронный) методы не позволят аутентификацию. Для меня, который подразумевал, что мое решение было принято.
Для Вкусный я закончил не потоки использования. Я выполнил все свои асинхронные сетевые вызовы, и я использовал синтаксический анализатор XML по умолчанию (который работает с помощью спин вызова). Так как это все управляемо событиями, и каждая единица является небольшой, это позволяет GUI быть довольно жидким, не имея сложности поточной обработки.
я использую конечный автомат для выяснения, почему я получаю конкретный ответ и очередь так, чтобы я только перенес единственную операцию "в полете" в любой момент времени. Существует ясный приказ к большинству запросов, таким образом, у меня нет потребности в системе с приоритетом.
сетевой код является самым сложным в моем приложении, и требовалось много времени для получения работы намного менее устойчивого!
Предупреждение возникает из-за того, что __ new __ ()
может ИМЕТЬ аргументы, но поскольку они везде игнорируются, передача ему аргументов (кроме cls) вызывает предупреждение . На самом деле (в настоящее время) передача дополнительных аргументов не является ошибкой, но они не действуют.
В py3k передача аргументов станет ошибкой.
См. 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