python: _ _ init_ _()與_ _ new_ _()的關係和區別、類的創建方法(7-3)

_ _ init_ ()與 _ new_ _()的關係和區別
1、_ _ init _ _ ()是初始化方法,創建對象之後,就立刻被默認調用了,可接收參數
2、_ _ new_ _ ()至少需要一個參數cls,代表當前類,此參數在實例化時由Python解釋器自動識別
3、_ _ new_ _ ()必須要有返回值,返回實例化出來的實例
4、_ _ init _ _ ()有一個參數self,就是這個_ _ new_ _ ()返回的實例,_ _ init _ _ ()在_ _ new_ _ ()的基礎上可以完成一些其他初始化的動作,_ _ init _ _ ()不需要返回值
5、如果_ _ new _ _ ()創建的是當前類的實例,會自動調用_ _ init _ _ ()函數,通過return語句裏面調用的返回的_ _ new_ _()函數的第一個參數是cls來保證是當前類實例

# Author: Mr.XUe
# 2019.10.30

class MyType(type):
	def __init__(self, what, base=None, dict=None):
		super(MyType, self).__init__(what, base, dict)
		
	def __call__(self, *argv, **kwargv):
		obj = self.__new__(self, *argv, **kwargv)
		
		self.__init__(obj)	

class Foo(object):
	__metaclass__ = MyType
	
	def __init__(self, name):
		self.name = name
		
	def __new__(cls, *argv, *kwargv):
		# 這一塊可以添加自己的小功能
		return object.__new__(cls, argv, kwargv) # 繼承父類的__new__方法	
		
obj = Foo("bob")

類的創建方法

# Author: Mr.Xue
# 2019.10.30

# 第2種方式
def func(self):
	print("hello world")

def __init__(self, name):
	self.name = name
	print("---")
	
Foo = type("Foo", (object,), {"func": func, '__init__': __init__})

f = Foo('Bob')
f.func()
發佈了49 篇原創文章 · 獲贊 41 · 訪問量 9361
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章