我遇到了Borg design并且认为它与我正在做的很相配,但是当我使用它时我得到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
但是,使用参数创建实例时会提供DepricationWarning
:
DepricationWarning: object.__new__() takes no parameters
有没有办法在不使用object.__new__()
参数的情况下使用Borg设计?
答案 0 :(得分:5)
您不必将参数传递给__new__
,它们会自动传递给__init__
。 object.__new__
无论如何都不会使用这些参数。以下是the man himself在此问题上所说的内容:
使用多个类调用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)
测试它:
>>> import borg
>>> b = borg.Borg(foo='bar')
bar
(仅测试2.7,假设它也适用于2.6。)