Python中类的创建过程

本文深入探讨Python中类和对象的创建过程,解析metaclass属性的作用,展示如何通过自定义元类MyType来实例化类Foo,并创建对象obj。通过两阶段详细解释,第一阶段解释器创建Foo类,第二阶段通过Foo类创建obj对象。
摘要由CSDN通过智能技术生成

我们知道Python中一切都是对象,其中实例对象是由class类创建的,类对象是由type类创建的

那么问题来了,类默认是由 type 类实例化产生,type类中如何实现的创建类?类又是如何创建对象?

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

在这里插入图片描述

class MyType(type):
 
    def __init__(self, what, bases=None, dict=None):
        super(MyType, self).__init__(what, bases, dict)
 
    def __call__(self, *args, **kwargs):
        obj = self.__new__(self, *args, **kwargs)
 
        self.__init__(obj)
 
class Foo(object):
 
    __metaclass__ = MyType
 
    def __init__(self, name):
        self.name = name
 
    def __new__(cls, *args, **kwargs):
        return object.__new__(cls, *args, **kwargs)
 
# 第一阶段:解释器从上到下执行代码创建Foo类
# 第二阶段:通过Foo类创建obj对象
obj = Foo()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值