gpt4 book ai didi

python - 为什么元类的 __call__ 方法在类上调用,而 native 类的 __call__ 没有?

转载 作者:行者123 更新时间:2023-11-28 21:51:07 25 4
gpt4 key购买 nike

class Meta(type):
def __call__(cls, *args, **kwargs):
print 'Meta.__call__ called.'
return super(Meta, cls).__call__(*args, **kwargs)


class MetaInstance(object):
__metaclass__ = Meta

# Instantiate class.
MetaInstance() # Meta.__call__ called.


class StandardClass(object):
@classmethod
def __call__(cls, *args, **kwargs):
print 'StandardClass.__call__ called.'
return super(StandardClass, cls).__call__(*args, **kwargs)

# Instantiate class.
StandardClass() # StandardClass.__call__ is not called!

为什么当我实例化一个类时,元类的 __call__ 方法调用了类,而原生类的 __call__ 却没有?

最佳答案

当您创建类实例时,将调用元类(该类的实例)__call__

# Instantiate class.
StandardClass() # StandardClass.__call__ is not called!

当您创建一个类实例然后“调用”该实例时,就会调用该类的__call__。我认为用 classmethod 装饰 __call__ 是行不通的。

这将调用您的元类和类的 __call__:

StandardClass()()

关于python - 为什么元类的 __call__ 方法在类上调用,而 native 类的 __call__ 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com