rh0*_*ium 5 python deprecated monostate
我有一个基本的Monostate与Python 2.6.
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", )
Run Code Online (Sandbox Code Playgroud)
哪位高兴地给了我以下的弃权警告..
untitled:4: DeprecationWarning: object.__new__() takes no parameters
self = object.__new__(cls, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
经过一段谷歌搜索后,我发现这是附加到Bug#1683368.我无法弄清楚这意味着什么.它抱怨以下这一行
self = object.__new__(cls, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这似乎没问题.有人可以用非专业术语解释为什么这是一个问题.我理解"这与其他内置插件不一致,如列表",但我不确定我理解为什么.有人会解释这个让我看到正确的方法吗?
谢谢
请参阅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
Run Code Online (Sandbox Code Playgroud)
Guido回答了这个__new__ deprecation问题:
消息意味着它所说的内容.:-)调用具有多个类参数的对象.__ new __()是没有意义的,任何这样做的代码都只是将这些args转移到黑洞中.
当它是有道理的对象.__新__()忽略额外的参数唯一的一次,当它没有被覆盖,但__init__ 是被覆盖-那么你有一个完全默认__new__和构造函数参数检查退居__init__.
所有这一切的目的是捕获像对象(42)这样的调用中的错误,该调用(再次)传递未使用的参数.这通常是程序中的错误的症状.
--Guido
该警告来自这样一个事实:__new__()可以有 args,但由于它们在任何地方都被忽略,因此将 args(除了 cls 之外)传递给它会导致警告。传递额外参数实际上(目前)并不是一个错误,但它们没有任何效果。
在 py3k 中,传递 args 会出错。
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |