type .__ call__如何知道结果的类型?

时间:2019-06-28 14:22:40

标签: python-3.x metaclass

我想问一下下面的代码片段:

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__方法中 获得信息。

1 个答案:

答案 0 :(得分:2)

垃圾邮件是Meta的一个实例,该实例通过self参数传递给Meta.__call__

super()构造将self的值传递给基本方法;因此type.__call__将通过其Spam参数传递self