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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章