我试图理解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)在这里。请解释。这将是非常可观的。
答案 0 :(得分:1)
super
只会将参数转发给负责类创建的type.__call__
。
这就像在正常情况下拨打super
一样'现在只有类层次结构,您在元类中调用它。由于SingleTon
是type
的子类,因此会被调用。在课程场景中,您(通常)将调用转发到基类object
。