【问题标题】:How does type.__call__ know the type of its result?type.__call__ 如何知道其结果的类型?
【发布时间】:2019-11-10 12:23:24
【问题描述】:

我想询问以下代码片段:

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() 将调用 元.__call__。我的推理到此为止。 Spam('foo') 将创建一个 垃圾邮件的实例。请解释如何在 Meta.__call__ 方法中 获取信息。

【问题讨论】:

    标签: python-3.x metaclass


    【解决方案1】:

    Spam是Meta的一个实例,这个实例在self参数中传递给Meta.__call__

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2015-06-28
      相关资源
      最近更新 更多