python中一切皆是对象,类 是由 type 类实例化产生

类默认是由 type 类实例化产生,type类中如何实现的创建类?类又是如何创建对象?

答:类中有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看类创建的过程。

class Mytype(type):

    def __init__(self, what, bases=None, dict=None):
        super(Mytype,self).__init__(what,bases,dict)
        print('MyType.init执行了')

    def __call__(self, *args, **kwargs):
        obj=self.__new__(self, *args, **kwargs)
        self.__init__(obj)

class Foo(metaclass=Mytype):#metaclass指定由那个类创建,默认为type,此时我们改成了继承至type的类Mytype
    def __init__(self):
        print('Foo.init执行了')
    def __new__(cls, *args, **kwargs):
        print('Foo.new 执行了')
        return object.__new__(cls, *args, **kwargs)

f=Foo()
#执行对象()则默认调用__call__()方法

执行结果为:

MyType.init执行了
Foo.new 执行了
Foo.init执行了

具体执行流程如下:

python中一切皆是对象,类 是由 type 类实例化产生_第1张图片

你可能感兴趣的:(python中一切皆是对象,类 是由 type 类实例化产生)