在我所了解的Python面向对象编程中,如果一个类定义了__call__
方法,则当我们像调用函数一样使用该类的实例时,该方法将被调用。例如:
class Employee:
def __init__(self,name,sal):
self.name = name
self.salary = sal
def __call__(self,value):
return self.salary * value
e = Employee("Subhayan",20000)
print (e(10))
__call__
方法以对象实例作为第一个参数。
我只是在尝试理解Python中的元类,并且我读到type
是所有用户定义类的默认元类。
如果我在Python中定义一个基本的自定义元类:
class Meta(type):
def __new__(meta, classname, supers, classdict):
# Run by inherited type.__call__
return type.__new__(meta, classname, supers, classdict)
根据书中提供的文档,元类 __new__
方法会被 type 类从 __call__
方法中调用。
现在我的问题是,要使用任何类的 __call__
方法,我们必须拥有该类的对象并将其作为函数调用。
在这里,我们没有 type 类的任何对象来使用它的 __call__
方法。
有人可以解释一下 type 类的 __call__
方法是如何被调用的吗?