博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
__new__和__init__的区别
阅读量:4315 次
发布时间:2019-06-06

本文共 740 字,大约阅读时间需要 2 分钟。

  1. __new__是一个静态方法,而__init__是一个实例方法.
  2. __new__方法会返回一个创建的实例,而__init__什么都不返回.
  3. 只有在__new__返回一个cls的实例时后面的__init__才能被调用,并且__init__方法的属性是__new__返回的实例

  

 

  4.当创建一个新实例时调用__new__,初始化一个实例时用__init__.

单例类

class Singleton(object):    def __new__(cls, *args, **kwargs):        # 如果没有_instance就创建一个,有的话直接返回        if not hasattr(cls,'_instance'):            # __new__已经被重写,所以只能执行父类的__new__            cls._instance=object.__new__(cls,*args,*kwargs)        return cls._instanceclass MyClass(Singleton):    a=1one=MyClass()two=MyClass()# one和two完全相同,可以用id(),==,is检查print(one.a)    # 1print(two.a)print(id(one))  # 2565285375728print(id(two))  # 2565285375728print(one == two)   # Trueprint(one is two)   # True

 

转载于:https://www.cnblogs.com/shuai1993/p/10060955.html

你可能感兴趣的文章
Mybatis分页插件
查看>>
sk_buff Structure
查看>>
oracle的级联更新、删除
查看>>
多浏览器开发需要注意的问题之一
查看>>
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>
codeforces Unusual Product
查看>>
hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
查看>>
springMVC中一个class中的多个方法
查看>>
Linux系统安装出错后出现grub rescue的修复方法
查看>>
线段树模板整理
查看>>
[教程][6月4日更新]VMware 8.02虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像InstallESD.iso!...
查看>>
[iOS问题归总]iPhone上传项目遇到的问题
查看>>
Python天天美味(总) --转
查看>>
Spring Framework tutorial
查看>>
【VS开发】win7下让程序默认以管理员身份运行
查看>>
【机器学习】Learning to Rank 简介
查看>>
Unity 使用实体类
查看>>