相关疑难解决方法(0)

Monostate的Python弃用警告__new__ - 有人能解释原因吗?

我有一个基本的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 deprecated monostate

5
推荐指数
2
解决办法
1175
查看次数

来自Design Pattern的Bruce Eckel的代码片段:我对它是如何工作感到困惑

我一直在阅读布鲁斯·埃克尔在Python中思考.目前,我正在阅读模式概念章节.在本章中,Eckel展示了python中Singletons的不同实现.但是我对Alex Martelli的Singleton代码(利用继承,而不是私有的嵌套类)有一个不清楚的理解.

这是我对目前代码的理解:

  • 所有Singleton对象都是Borg的子类
  • _shared_state最初是一个空字典
  • _shared_state是一个全局变量; 使用Borg的任何对象都具有相同的_shared_state

到目前为止我的困惑:

  • 这是什么行的目的:self.__dict__ = self._shared_state; 或者字典的目的
  • Singletons的所有对象最终是如何具有相同的val,即使它们都是该类的不同实例.
  • 总的来说,我不知道博格是如何运作的

许多人提前感谢!

- 三

*更新:每个Singleton对象创建后_shared_state中存储的内容是什么?

#: Alex' Martelli's Singleton in Python
class Borg:
  _shared_state = {}
  def __init__(self):
    self.__dict__ = self._shared_state

class Singleton(Borg):
  def __init__(self, arg):
    Borg.__init__(self)
    self.val = arg
  def __str__(self): return self.val

x = Singleton('sausage')
print …
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
2
解决办法
1933
查看次数

标签 统计

python ×2

deprecated ×1

monostate ×1