• __new__ '''魔术方法


    # ### __new__
    '''
    	触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
    	功能:控制对象的创建过程
    	参数:至少一个cls接受当前的类,其他根据情况决定
    	返回值:通常返回对象或None
    '''
    # (1) 基本用法
    """
    python3.x 新式类 python2.x 旧式类, 新式类不需要每次都写一次object,默认继承
    作用:控制创建的对象,
    """
    class MyClass2():
    	abc = 1
    	
    obj2 = MyClass2()
    class MyClass(object):
    	def __new__(cls):
    		print(cls) # <class '__main__.MyClass'>
    		# 借助object父类方法里面__new__ 来为本类创建一个对象
    		# return object.__new__(cls)  # 返回一个本类对象
    		# return None # 返回一个空对象
    		# return obj2 # 返回的是一个其他类的对象
    	pass
    
    # 实例化对象obj
    # obj = MyClass()
    # print(obj)
    # print(obj.abc)
    
    # (2) 对比__new__ 和 __init__ 的触发时机
    '''
    __new__ 魔术方法是用来创建对象的
    __init__魔术方法是用来初始化对象的
    得现有对象,才能够初始化,没有对象初始化谁?
    __new__ 的触发时机要快于__init__
    
    
    __new__ __init__ 这两个方法的参数要一一匹配.
    '''
    
    #(1) 一个参数
    class Boat():
    	def __new__(cls,name):
    		print(1)
    		return object.__new__(cls)
    		
    	def __init__(self,name):
    		self.name = name 	
    
    obj = Boat("大锤")
    
    # (2) 无限个参数
    class Boat():
    	def __new__(cls,*args,**kwargs):
    		print(1)
    		return object.__new__(cls)
    		
    	def __init__(self,*args,**kwargs):
    		strvar = ""
    		for i in args:
    			strvar += i + " "
    		print("小船的贡献者有:",strvar)
    		print("小船的名字是{}".format(kwargs['name']))
    
    obj = Boat("王俊文","舒畅","境泽年","五金玲",name="Anglelababy")
    
    
    # (3) 如果通过__new__返回的是其他类的对象,不会触发自己本类的__init__
    '''因为__init__初始化的是本类对象'''
    class Boat():
    	def __new__(cls,*args,**kwargs):
    		return obj2
    		
    	def __init__(self):
    		print("init调用了")
    		
    obj = Boat()
    print(obj.abc)
    

      

  • 相关阅读:
    python-进阶-优雅的python写法
    springMVC3学习(十一)--文件上传CommonsMultipartFile
    springMVC3学习(十)--注解式控制器
    CSS3/jQuery自定义弹出窗口
    window.open()详解及浏览器兼容性问题
    空格&nbsp在不同浏览器中显示距离不一致问题解决方法
    jQuery拖动调整表格列宽度-resizableColumns
    jQuery表格排序组件-tablesorter
    springMVC3学习(九)--redirect和forward跳转
    springMVC3学习(八)--全局的异常处理
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920631.html
Copyright © 2020-2023  润新知