调用元类基时, object.__init__() 不带参数

Posted

技术标签:

【中文标题】调用元类基时, object.__init__() 不带参数【英文标题】:When calling the metaclass bases, object.__init__() takes no parameters 【发布时间】:2012-03-22 06:15:58 【问题描述】:

当我尝试使用这种单例方法时:

class Singleton(object):                                                     
    def __init__(self, name, bases, dict):                                   
        super(Singleton, self).__init__(name, bases, dict)                   
        self._instance = None                                                

    def __call__(self):                                                      
        if self._instance is None:                                           
            self._instance = super(Singleton, self).__call__()
        return self._instance                                                


class NewClass(object):      
    __metaclass__ = Singleton

我遇到了一个错误:

调用元类库时出错 object.init() 不带参数

我不确定,我是否正确理解了参数是什么,采用__init__ 方法:name, bases, dict。实际上 - 我的错误/不理解在哪里?

【问题讨论】:

【参考方案1】:

元类派生自type,而不是object

【讨论】:

这个答案不正确。至少在技术上。 Python2 和 Python3 的文档声明不允许从类型继承(尽管不推荐)。在 Python2 中,它可以是任何可调用的。

以上是关于调用元类基时, object.__init__() 不带参数的主要内容,如果未能解决你的问题,请参考以下文章

python:元类与抽象基类

自定义元类 __call__,__init__,__new__总结

通过元类控制类的调用过程

002 元类的创建及简单使用

元类总结

元类type