【问题标题】:When calling the metaclass bases, object.__init__() takes no parameters调用元类基时, object.__init__() 不带参数
【发布时间】: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。实际上 - 我的错误/不理解在哪里?

【问题讨论】:

    标签: python oop metaclass


    【解决方案1】:

    元类派生自type,而不是object

    【讨论】:

    • 这个答案不正确。至少在技术上。 Python2Python3 的文档声明不允许从类型继承(尽管不推荐)。在 Python2 中,它可以是任何可调用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多