从我所了解的关于Python面向对象的编程中,如果一个类已经定义了__call__
方法,如果我们像使用函数调用一样使用类的实例,就会调用该方法。例如:__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__
函数是如何进入图片的?
这里有一个问题。在Singleton __call__函数内部,cls参数将具有MyClass的值。 _instances属于Singleton类。那么MyClass如何拥有_instances字典? –
因为'MyClass'是'Singleton'的一个实例。 – yorodm
Subhayan:...和所有'Singleton'实例共享相同的'_instances'字典,因为它是一个类,_not_不是实例,属性。 – martineau