【发布时间】:2018-04-22 02:54:46
【问题描述】:
所以有object.__new__(cls)和super().__new__(cls)函数可以用来创建实例,但是我可以用type(name, bases, dict)(*args, **kwargs)来创建实例吗?
class Singleton(object):
instance = None
def __init__(self, *args, **kwargs):
pass
def __new__(cls, *args, **kwargs):
if isinstance(cls.instance, type(None)):
mcls = cls.__class__
cls.instance = type(mcls.__name__, mcls.__bases__, dict(cls.__dict__))(*args, *kwargs)
return cls.instance
s = Singleton()
print(s)
【问题讨论】:
-
你为什么要这样做?
-
实验:)
-
嗯,错误非常明确,您将
mappingproxy而不是dict传递给参数 3,dict(mcls.__dict__)也是如此。请注意,我正在尝试找出另一个错误... -
谢谢,我更改了 dict(mcls.__dict__) 结果:TypeError: type qualname must be a str, not getset_descriptor
-
type('MyClass',(),{})()
标签: python python-3.x metaclass