python __call__魔术方法是类方法还是对象方法?

问题描述

我最近正在研究python中的设计模式,我在单例设计模式中看到了这一点:

# THIS WILL BE USED AS MetaCLASS FOR OTHER CLASSES
class MetaSingleton(type):
    _instance = {}

    def __call__(cls,*args,**kwargs):
        if cls not in cls._instance:
            cls._instance[cls] = super().__call__(*args,**kwargs)
        return cls._instance[cls]   

我也知道__call__是类方法。 但我记得我曾将__call__self一起使用,如下所示:

class myclass:
   def __call__(self):
      print('__call__ is called.')
x = myclass()
x()
# __call__ is called.

(这两个代码彼此无关,它们只是示例。)

__call__方法是类方法还是对象方法

还有另一个问题: 如果是类方法,在什么情况下可以将其用作类方法

解决方法

这是一个实例方法。如果它是类方法,则将用classmethod装饰。第一个参数的名称无关紧要。如果需要,可以为banana

-来自juanpa.arrivillagacomment

这是一个实例方法,但是元类的实例是类。

-来自Barmarcomment