python object creation

python里everything is object,object creation主要涉及到一下几个函数 1. __init__(self,*args,*kgs) 2.__new__(cls,*args,**kgs) 3.__call__(self,*args,**kgs) 首先介绍这三个函数,接着介绍创建class本身这个对象,以及metaclass时这几个函数的具体调用顺序 创建一个类的实例是,调用这个类的__call__方法,在call方法里首先调用了__new__方法创建这个对象,接着调用__init__方法来对这个对象进行初始化 上面就是python里创建一个类的实例的过程 因此,三个函数对象的参数: 1. init的self是这个创建的类的实例 2.new的cls是这个类本身对应的对象 3.call的self也是这个类本身对应的对象,与new的cls是同一个对象 当一个类的metaclass不是type是,发生的函数调用也是如此,只是在metaclass是默认的type时,调用的call方法是type的call,而此时调用的是metaclass的call,我们可以override这个call,在对象已经被初始化了后加入我们的处理函数 例如:
class AttributeInitType(type):
     def __call__(self, *args, **kwargs):
         """ Create a new instance. """
 
         # First, create the object in the normal default way.
         obj = type.__call__(self, *args)
 
         # Additionally, set attributes on the new object.
         for name in kwargs:
             setattr(obj, name, kwargs[name])
 
         # Return the new object.
         return obj

另外需要注意一点的时,当python遇到一个class时便会创建这个class对应的对象,此时会调用metaclass的new和init方法
因此对于metaclass可以在init函数对这个类进行操作,在call方法里对本次创建的实例进行操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值