博格设计与新式课程

Tor*_*ler 4 python

我遇到了Borg的设计并且认为它适合我正在做的事情,但是我正在DeprecationWarning使用它(我现在使用的是Python 2.6,但很快就会转向更新的版本).

评论中的新版本是:

class Borg(object):
    _state = {}
    def __new__(cls, *p, **k):
        self = object.__new__(cls, *p, **k)
        self.__dict__ = cls._state
        return self
Run Code Online (Sandbox Code Playgroud)

但是,在使用参数创建实例时,会给出DepricationWarning:

DepricationWarning: object.__new__() takes no parameters
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Borg设计而不使用object.__new__()参数?

Rob*_*ers 5

您不必传递参数__new__,它们将__init__自动传递给它们.object.__new__反正不会使用这些论点.以下是该男子自己在此事上所说的话:

使用多个类参数调用object .__ new __()是没有意义的,而这样做的任何代码只是将这些args转移到黑洞中.

所以只需这样做:

class Borg(object):
    _state = {}
    def __new__(cls, *p, **k):
        self = object.__new__(cls)
        self.__dict__ = cls._state
        return self

    def __init__(self, foo):
        print(foo)
Run Code Online (Sandbox Code Playgroud)

测试一下:

>>> import borg
>>> b = borg.Borg(foo='bar')
bar
Run Code Online (Sandbox Code Playgroud)

(仅测试2.7,假设它也适用于2.6.)