对type、 __new__、 metaclass的理解

class A():  # 解释器运行到此处,发现class关键字,调用type函数,创建类A    
  def __new__(cls,v):
        return super().__new__(cls)
    
   def __init__(self,v):
        self.v=v
a=A('gg') # 首先调用__new__方法,通过object父类,创建了类A的一个实例对象,然后调用__init__方法对该实例对象初始化

print(a.v) # 打印出‘gg’

class
BaseClass(type): def __new__(cls, *args, **kwargs): print("in BaseClass") return super().__new__(cls, *args, **kwargs) class User(metaclass=BaseClass):
# 发现class关键字,调用User的元类BaseClass的__new__方法创建User类,打印出‘in BaseClass’
def __init__(self, name): self.name = name

 

posted @ 2019-05-24 13:54  bluemoonsky  阅读(485)  评论(0)    收藏  举报