如何解决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
这是一个实例方法,但是元类的实例是类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。