python - TypeError: object.__new__() 只接受一个参数(要实例化的类型)
问题描述
我想实现名为 MyClass 的类。这个类应该是一个单例,它必须从 BaseClass 继承。
最后我想出了以下解决方案:
import random
class Singleton(object):
_instances = {}
def __new__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instances[cls]
class BaseClass(object):
def __init__(self, data):
self.value = random.random()
self.data = data
def asfaa(self):
pass
class MyClass(BaseClass, Singleton):
def __init__(self, data=3):
super().__init__(data)
self.a = random.random()
inst = MyClass(3)
def __init__(self, data=3)
如果MyClass 没有任何参数,则 Evrythig 工作正常。
否则我会出错
line 9, in __new__
cls._instances[cls] = super(Singleton, cls).__new__(cls, *args, **kwargs)
TypeError: object.__new__() takes exactly one argument (the type to instantiate)
如何向 MyClass 提供任何参数?
解决方案
所以,你的错误是TypeError: object.__new__() takes exactly one argument (the type to instantiate)
。如果您查看您正在执行的代码super(Singleton, cls).__new__(cls, *args, **kwargs)
。 super(Singleton, cls)
指object
类,因为您的Singleton
类正在继承object
. 你只需要改变这个:
cls._instances[cls] = super(Singleton, cls).__new__(cls, *args, **kwargs)
对此:
cls._instances[cls] = super(Singleton, cls).__new__(cls)
因为object
不接受任何额外的论点。
推荐阅读
- python - 尽管数据库/模型中存在数据,但 FastAPI 没有选择嵌套模式
- python - Django 文件系统/基于文件的缓存 5-10% 的时间无法写入数据
- c++ - 为什么没有到达while循环?
- azureservicebus - Azure 服务总线上的 MT。为什么我看到 System.InvalidOperationException:连接关闭时无法创建会话?
- java - android - 如何使用 BarcodeDetector 通过一张条码图像而不是使用相机扫描条码来读取条码
- php - PHP文件不返回任何内容
- flutter - Flutter中TextField标签文本添加两种颜色
- vue.js - 如何使用 SSR 的预取数据正确渲染 vue?
- c - linux/ubuntu/stat() 使用字符串文字和字符串变量时的工作方式不同
- dialogflow-es - 如何保护聊天机器人免受垃圾邮件的侵害?