【发布时间】:2017-10-25 23:10:34
【问题描述】:
根据我对 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__ 方法将由继承自类型的__call__ 方法运行。
现在我的问题是使用任何类的__call__ 方法,我们必须拥有该类的对象,然后将其作为函数调用。
这里我们没有任何类型的对象可以使用其__call__ 函数。
有人可以向我解释一下类型类的__call__ 函数是如何出现的吗?
【问题讨论】: