python-面向对象-单例

版权声明:所有代码均为自己总结,若有雷同请勿模仿 https://blog.csdn.net/weixin_44253023/article/details/89784579

#__new__方法返回一个对象地址,单例就是让每个对象都返回同一个对象地址
单例的优点:节约内存

单例的第一种写法

class Person 
	__name=None
	
	def __new__(cls,*args,**kvargs):
		if  not cls.__name:
			cls.__name=object.__new__(cls) #每次返回当前类的对象地址
		return cls.__name
		
	p1=Person ()
	p2=Person ()
	print(id(p1),p(2))
		

单例的第二种写法

class Person 
	def __new__(cls,*args,**kvargs):
		pass #每次返回None的对象地址
		
p1=Person ()
p2=Person ()
print(id(p1),p(2))
print(id(None))
		

这样写单例最为简单,每次都是返回None

单例的第三种写法

class Person 
	__name=None
	
	def __new__(cls,*args,**kvargs):
		if  not cls.__name:
			cls.__name==object.__new__#每个对象都返回父对象的那个地址
		return cls.__name
		
p1=Person ()
p2=Person ()
print(id(p1),p(2))
		

#注意第三种写法必须是==,而不能是=,否则不是单例模式

最后要注意的一点就是,使用单例模式对一个对象增加属性,存在那个对象地址中的对象都会增加属性
示例;

p1.age=20
print(p1.age)
print(p2.age)

可以发现p2也增加了age属性。

猜你喜欢

转载自blog.csdn.net/weixin_44253023/article/details/89784579