gpt4 book ai didi

python - 具有新型类的 Borg 设计

转载 作者:太空狗 更新时间:2023-10-30 02:49:18 27 4
gpt4 key购买 nike

我遇到了 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 设计?

最佳答案

您不必将参数传递给 __new__,它们会自动传递给 __init__object.__new__ 无论如何都不使用这些参数。这是the man himself对此事说:

There's no point in calling object.__new__() with more than a class parameter, and any code that did so was just dumping those args into a black hole.

所以只需这样做:

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。)

关于python - 具有新型类的 Borg 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com