类的特殊方法"__new__"详解
2024-09-04 08:20:50
上代码!
class A:
def __new__(cls, *args, **kwargs):
obj = super().__new__(cls)
print("__new__ ", obj) # <__main__.A object at 0x00000000021D76A0>
return obj def __init__(self, name, age):
print("__init__ ", self) # <__main__.A object at 0x00000000021D76A0>
self.name = name
self.age = age a = A('sath', 22)
print(a) # <__main__.A object at 0x00000000021D76A0>
# 可以看出三次打印都是同一个内存地址
# 执行的顺序为: __new__ >>>>> __init__ >>>>> a
# 一个完整的实例化对象过程:
# 1. 当执行到类名加括号时, 首先执行"__new__"开辟一块内存空间, 并且携带了你要给对象封装的属性
# 2. 将开辟的空间和要封装的对象属性return给"__init__"
# 3. "__init__" 初始化这一块对象的内存空间, 将属性封装进这个内存空间中
# 4. 对象空间初始化完成后, 将这个空间返回给调用者, 得到一个类型为"A"的对象"a"
最新文章
- .Net Core Linux centos7行—发布程序到生产环境
- ASP.NET连接远程Oracle数据库,提示试图加载格式不正确的程序
- ubuntu14.04下的NVIDIA Tesla K80显卡驱动的安装教程
- Node.Js —— PM2介绍
- ubuntu+php5.6+redis+mysql5.5+nginx
- webhdfs追加写HDFS异常
- 【js】js 让图片旋转
- poj 3080 Blue Jeans(水题 暴搜)
- bootstrap.css.map这个文件有何用处?该怎能使用它?
- Codeforces Round #258 (Div. 2/B)/Codeforces451B_Sort the Array
- jQuery回到顶部插件jQuery GoUp
- Javascript赋值语句中的“&;&;”操作符和"||"操作符
- POI单元格添加公式以及读取公式结果的值
- Node.js学习之TCP/IP数据通讯
- Web前端框架与类库的思考【转】
- Android AsyncTask内部线程池异步执行任务机制简要分析
- 在Office Add-in中实现单点登陆(SSO)
- python语法_模块
- 通过JS如何获取IP地址
- HOWTO: Avizo/Amira使用前的显卡设置(Volume Rendering,Volren不显示)