Ho un Monostate di base con Python 2.6.Avvertimenti di deprecazione di Python con Monostate __new__ - Qualcuno può spiegare perché?
class Borg(object):
__shared_state = {}
def __new__(cls, *args, **kwargs):
self = object.__new__(cls, *args, **kwargs)
self.__dict__ = cls.__shared_state
return self
def __init__(self, *args, **kwargs):
noSend = kwargs.get("noSend", False)
reportLevel = kwargs.get("reportLevel", 30)
reportMethods = kwargs.get("reportMethods", "BaseReport")
contacts= kwargs.get("contacts", None)
a = Borg(contacts="Foo", noSend="Bar",)
che fortunatamente mi dà il seguente avviso Deprecation ..
untitled:4: DeprecationWarning: object.__new__() takes no parameters
self = object.__new__(cls, *args, **kwargs)
Dopo un po 'di googling ho trovato questo è attaccato Bug #1683368. Quello che non riesco a capire è cosa significhi. Si lamenta della seguente riga
self = object.__new__(cls, *args, **kwargs)
Che sembra essere OK. Qualcuno può spiegare in laici termini perché questo è un problema. Capisco che "questo è incoerente con altri built-in, come l'elenco", ma non sono sicuro di aver capito perché. Qualcuno potrebbe spiegare questo mi mostra il modo giusto per farlo?
Grazie
sto riuscendo a vedere come sono ignorati? Elimina * args e ** kwargs dal nuovo e bombarderà perché sono necessari per __init__ che li sta aspettando. L'ultima frase è quella che sto cercando di prevenire :-) Voglio che funzioni in 3k. – rh0dium
Non posso discutere con i progettisti di linguaggi. Se dicono "nuovo non prende argomenti", lo faccio prendere argomenti. '__init__' e' __new__' funzionano allo stesso modo, forse il tuo caso d'uso dovrebbe usare init invece di new. –