我想问一下下面的代码片段:
class Meta(type):
def __call__(self, *args):
obj = super().__call__(*args)
print('Meta specific __call__ actions')
return obj
class Spam(metaclass=Meta):
def __init__(self, *args):
print('Spam.__init__(%r)' % args)
super().__ call__(super()在这里是“类型”的意思)怎么知道? 创建类垃圾邮件的实例? __call__没有任何参数 会有所帮助。
Spam是Meta的一个实例,因此Spam()必须调用 Meta .__ call__。我的推理到此为止。垃圾邮件('foo')将创建一个 垃圾邮件实例。请解释如何在Meta .__ call__方法中 获得信息。
答案 0 :(得分:2)
垃圾邮件是Meta的一个实例,该实例通过self
参数传递给Meta.__call__
。
super()
构造将self
的值传递给基本方法;因此type.__call__
将通过其Spam
参数传递self
。