python自定义元类调用方法与类的关系

时间:2017-02-24 18:00:49

标签: python python-2.7 python-3.x

我试图理解python 元类之间的关系。我试图创建单例类并找到此代码

class SingleTon(type):
    def __call__(self, *args, **kwargs):
        if self._instances is None:
            self._instances = super(SingleTon, self).__call__(*args, **kwargs)
        return self._instances

class Counter:
    __metaclass__ = SingleTon
    _instances = None
    def __init__(self):
        self.count = 1
c = Counter()

我的问题是如何使用元类创建计数器类对象。我知道每当我们创建一个对象时都会调用元类 调用方法,但这里的代码是 super(SingleTon,self).__ call __(* args,* * kwargs)在这里。请解释。这将是非常可观的。

1 个答案:

答案 0 :(得分:1)

super只会将参数转发给负责类创建的type.__call__

这就像在正常情况下拨打super一样'现在只有类层次结构,您在元类中调用它。由于SingleTontype的子类,因此会被调用。在课程场景中,您(通常)将调用转发到基类object