__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
原文地址:https://www.cnblogs.com/shuai1993/p/10060955.html
时间: 2024-10-10 02:54:26