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