1. 程式人生 > >python中的__new__方法和單例設計模式

python中的__new__方法和單例設計模式


#1. __new__方法

# 建立物件(__new__) =》 初始化物件(__init__)


class Car(object):
	#__new__方法是類方法
	def __new__(cls,*args,**kwargs):
		print('new method')
		# 一定要切記,必須要在new方法後面返回當前這個類的物件
		#因為__new__方法是來建立物件的
		return super(Car,cls).__new__(cls,*args,**kwargs)

	def __init__(self):
		print('car init method')


car=Car()
print(car)

#2.單例設計模式:某個類或者模型在整個程式執行期間最多隻能有一個物件被建立
#我們可以判斷,如果User這個類沒有建立過物件,那麼就建立一個物件儲存在某個地方
#以後如果要再建立物件,我會去判斷,如果之前已經建立了一個物件,那麼就不再建立
#而是直接把之前那個物件返回回去
#__new__方法建立物件

class User(object):

	__instance = None
	
	def __new__(cls,*args,**kwargs):
		if not cls.__instance:
			cls.__instance = super(User,cls).__new__(cls)
		return cls.__instance

	def __init__(self,name):
		self.name = name

	
user1 = User('luobin')
user2 = User('fjq')

#判斷兩個物件是否屬於同一個物件,通過呼叫id()來檢視他們的id
#若一樣,則兩個物件就是同一個物件。
print(id(user1))
print(id(user2))