1. __new__:创建对象时调用,会返回当前对象的一个实例。(默认情况下也就是你在类中没有没有重新这个方法,会默认返回当前类的示例,如果你重写了这个方法,但是在方法中没有返回当前类的示例,那么也就是说没有创建对象,也就不会执行init方法)

2. __init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值。(只有在__new__方法中返回当前类的示例时,才会自动执行)

3. 在类中,如果__new__和__init__同时存在,会优先调用__new__。

class NameInfo:

    def __new__(cls, *args, **kwargs):  # 创建对象的时候执行
print('__new__')
# return super(NameInfo, cls).__new__(cls) # 如果注释不执行,不会执行init方法,因为没有返回类的示例,在实例化类时,也不会创建出对象 def __init__(self, name, *args, **kwargs): # 初始化对象的时候执行
self.name = name
print("__init__") @property
def get_name(self):
return self.name @get_name.setter
def get_name(self,new_name):
self.name = new_name if __name__ == "__main__":
alex = NameInfo('ALEy')

2. __new__()方法还可以用来实现单例模式

class NameInfo:

    def __new__(cls, *args, **kwargs):  # 创建对象的时候执行
if not hasattr(cls, 'instance'):
# 创建实例
cls.instance = super(NameInfo, cls).__new__(cls)
# print(cls.instance)
return cls.instance def __init__(self, name, *args, **kwargs): # 初始化对象的时候执行
self.name = name
print("__init__") if __name__ == "__main__":
alex = NameInfo('ALEy')
eric = NameInfo('eric')
print(id(alex))
print(id(eric))

C:\python35\python.exe D:/workspace/spider/text.py
>>>> __init__
>>>> __init__
>>>> 2947617811816
>>>> 2947617811816

参考文档:https://www.cnblogs.com/jayliu/p/9013155.html

最新文章

  1. react+react-router+webpack+express+nodejs
  2. Linux启动与登陆环境
  3. python spark 配置
  4. std::ios::sync_with_stdio(false);
  5. UX结合需求实例化进行设计开发
  6. MyFragment
  7. Android UI学习1:控件和基本事件的响应
  8. Oralce11 客户端的安装和 PlSql Developer 的配置
  9. linux 模拟延时和丢包
  10. Git新建本地分支与远程分支关联问题:git branch --set-upstream
  11. oracle 经典语句集合
  12. iOS的扩展类,扩展属性
  13. vs2015 动态链接库问题
  14. pom.xml配置详解
  15. CentOS 7安装squid代理服务器
  16. A - Alice's Print Service ZOJ - 3726 (二分)
  17. 高效使用VSCode的9点建议
  18. python中线程的知识点
  19. 3_主流部署方式介绍-Django+gunicorn+nginx
  20. iOS 苹果标识符

热门文章

  1. Yali7月集训Contest2 T1 Cube 题解
  2. O035、Nova Suspend / Rescue 操作详解
  3. java字符串大小写转换
  4. react中怎么写css样式?
  5. 6 java 笔记
  6. TVM使用问题记录
  7. Oracle 触发器学习笔记一
  8. Linux rpm yum
  9. linux基础—课堂随笔010_系统启动和内核管理
  10. 学习使用C语言实现线性表