シンプルなプログラムで、シンプルな基本クラスを実装しています。新しいを定義しています。しかし、私はもはやのinitメソッドに引数を送ることはできません - 私は「TypeError例外を:オブジェクトは()パラメータを受け取りません」を取得ないときシングルトン新しいスーパーコールから:pythonのオーバーライド__new__は__init__に引数を送信できません
class Singleton(object):
_instances = {}
def __new__(cls, *args, **kwargs):
print(args, kwargs)
if cls._instances.get(cls, None) is None:
cls._instances[cls] = super(Singleton, cls).__new__(cls, *args, **kwargs)
return Singleton._instances[cls]
class OneOfAKind(Singleton):
def __init__(self):
print('--> OneOfAKind __init__')
Singleton.__init__(self)
class OneOfAKind2(Singleton):
def __init__(self, onearg):
print('--> OneOfAKind2 __init__')
Singleton.__init__(self)
self._onearg = onearg
x = OneOfAKind()
y = OneOfAKind()
print(x == y)
X = OneOfAKind2('testing')
出力は次のようになります。
() {}
Traceback (most recent call last):
File "./mytest.py", line 29, in <module>
x = OneOfAKind()
File "./mytest.py", line 10, in __new__
cls._instances[cls] = super(Singleton, cls).__new__(cls,(), {})
TypeError: object() takes no parameters
をあなたはPython 3を使用していますか? – BorrajaX