首先元类中的__new__被调用

所有使用该元类的类都会调用一次,不管其有没有初始化,所以元类__new__的作用是修改/验证类的定义

返回的是一个元类的实例,即一个类的定义

元类的__init__由其__new__调用

接着元类的__call__被调用,要返回一个类的实例

元类__call__中要调用类的__new__和__init__

def __call__(cls, *args, **kwargs):
print("calling Meta's __call__", cls)
i = cls.__new__(cls)
i.__init__(*args, **kwargs)
return i

当然,也可以处理完逻辑之后, return super().__call__(*args, **kwargs)

--------------------------------------------------------------------------------------------------

__new__ 是类方法

__init__ 和 __call__ 是实例方法,只能由类的实例(对象)来调用

因此在类实例化过程中 a = A(), 类是可调用的函数,调用的是元类中的__call__函数, 因为类是元类的实例

最新文章

  1. Centos 7 开启端口
  2. FireDAC 连接access MDB数据库的方法
  3. HTML5 canvas处理图片的各种效果,包括放大缩小涂鸦等
  4. pip install lxml出错解决
  5. IOS开发之实现App消息推送
  6. HTML笔记(三) 列表
  7. Android——ScrollView
  8. Tkinter教程之Label篇
  9. url找不到指定位置
  10. SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
  11. magento里获取用户姓名
  12. 使用NPOI导出Excel引发异常(IsReadOnly = “book.IsReadOnly”引发了类型“System.NotImplementedException”的异常)
  13. 基于观察者模式-----otto源码分析
  14. JPA + SpringData 操作数据库--Helloworld实例
  15. java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
  16. 用static声明外部变量与内、外部函数
  17. anaconda安装win10
  18. JAVA并发编程——守护线程(Daemon Thread)
  19. TlistView基本使用
  20. 使用mybatisplus实现动态路由

热门文章

  1. 申请apple开发人员账号的波折
  2. 坚持c++,真正掌握c++(4)
  3. 什么是spark(二) RDD
  4. Web 漏洞分析与防御之点击劫持(三)
  5. Redis持久化的简单介绍
  6. onclick监听
  7. Java通过aws java sdk在AWS S3上进行操作客户端
  8. printf()_scanf()_取余运算符与取模运算符
  9. php 实现四种排序两种查找
  10. java web 程序---猜数字游戏