Mam podstawowy Monostate z Pythonem 2.6.Python Deprecation Ostrzeżenia z Monostate __new__ - Czy ktoś może wyjaśnić, dlaczego?
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",)
które szczęśliwie daje mi następujące ostrzeżenie Deprecation ..
untitled:4: DeprecationWarning: object.__new__() takes no parameters
self = object.__new__(cls, *args, **kwargs)
Po trochę googlowania znajdę ten jest dołączony do Bug #1683368. Nie mogę zrozumieć, co to oznacza. Narzeka na następującą linię:
self = object.__new__(cls, *args, **kwargs)
Co wydaje się być OK. Czy ktoś może wyjaśnić, dlaczego to jest problem? Rozumiem, że "jest to niezgodne z innymi wbudowanymi, takimi jak lista", ale nie jestem pewien, czy rozumiem dlaczego. Czy ktoś wytłumaczyłby mi to, pokazując mi właściwą drogę?
Dzięki
jestem braku zobaczyć, jak są one ignorowane? Wyjmij * args i ** kwargs z nowego, a on zbombarduje, ponieważ są potrzebne __init__, który ich oczekuje. Ostatnie oświadczenie jest tym, które próbuję zapobiec :-) Chcę, żeby działało w 3k. – rh0dium
Nie mogę dyskutować z projektantami języków. Jeśli powiedzą "nowy nie bierze żadnych argumentów", to nie chcę argumentować. '__init__' i' __new__' działają podobnie, być może twój przypadek użycia powinien używać init zamiast new. –