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

python custom metaclass call method relation with classes

我试图理解Python元类和类之间的关系。我试图创建singleton类并找到此代码

1
2
3
4
5
6
7
8
9
10
11
12
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)在这里所做的。请解释一下。这将是非常可观的。


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

这就像在一个"普通"的类层次结构中调用super,只是现在,您在一个元类中调用它。因为SingleTontype的一个子类,所以会调用它。在类场景中,您(通常)将调用转发到基类object