我遇到了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__()参数?
您不必传递参数__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.)