__new__和__init__的区别
Posted shuai1993
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__new__和__init__的区别相关的知识,希望对你有一定的参考价值。
__new__
是一个静态方法,而__init__
是一个实例方法.__new__
方法会返回一个创建的实例,而__init__
什么都不返回.- 只有在
__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._instance class MyClass(Singleton): a=1 one=MyClass() two=MyClass() # one和two完全相同,可以用id(),==,is检查 print(one.a) # 1 print(two.a) print(id(one)) # 2565285375728 print(id(two)) # 2565285375728 print(one == two) # True print(one is two) # True
以上是关于__new__和__init__的区别的主要内容,如果未能解决你的问题,请参考以下文章
Python-__init__ 和 __new__区别和原理