python中的__new__概念(工厂
来源:互联网 发布:sql应用程序在哪里 编辑:程序博客网 时间:2024/06/04 18:09
__new__方法实际上在__init__方法之前执行,用于创建类的实例。然而__init__方法负责实例创建后对其进行自定义,__new__方法才是实际上创建并返回实例的方法。
__new__方法的第一个也是最重要的参数是创建实例所需的要的类(按照惯例,命名为cls)。
在大多数起概况下,__new__方法的其他参数会被完整复制到__init__方法中。参数在调用类构造函数时首先会被传递给__new__方法,然后再传递给__init__方法。
在实际应用中,大多数类无需定义__new__方法。该方法在python中的内置实现已经足够。
通常,我们希望__new__方法返回一个已经被初始化后的类的实例。在某些情况下,并不需要这么做。需要注意的是,只有在通过__new__方法返回当前类的实例时才会执行__init__方法。如果返回的不是当前类的实例,就不会调用__init__方法。
class MyClass(object):
def __new__(cls,a):
print("__new__ 被调用,参数为:%d"%a)
#在实现__new__方法的时候,应该首先调用父类的__new__方法
#然后再开始自定义的逻辑
#调用父类__new__方法创建实例,并返回
return object.__new__(cls)
def __init__(self,a):
print("__init__被调用,参数为:%d"%a)
#解释器先将参数100传递给__new__方法
#如果__new__方法创建对象,那么会调用__init__方法
#这时会将参数100再传递给__init__方法
mclass = MyClass(100)
总结
- __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供;
- __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例;
- __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值;
- 我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节。
- python中的__new__概念(工厂
- python中的__new__()方法
- python中的__new__方法
- python 中的 __new__ 和 __init__
- 关于python中的__new__方法
- 详解python中的__new__方法
- Python中的__init__和__new__
- 浅谈 Python 中的 __init__ 和 __new__
- 详解Python中的__init__和__new__
- 详解Python中的__init__和__new__
- Python中的__new__和__init__的区别
- Python中的__new__()方法的使用实例
- python中的__init__ 、__new__、__call__小结及使用
- python中的__init__ 、__new__、__call__小结及使用
- Python中的__init__方法与__new__方法的区别
- Python 面向对象中的__init__、__new__以及super()
- 一个案例深入Python中的__new__和__init__
- Python中的__new__、__init__、__call__三个特殊方法
- Android布局----详解
- 1.7-Java-冒泡排序
- SSO搭建(框架KISSO)
- Jmeter连接SqlServer数据库进行压力测试
- 归并排序
- python中的__new__概念(工厂
- java新手上路(五):线程,多线程
- Uva514——Rails
- HDU1201 18岁的生日
- Spring Boot整合jpa,Shiro进行权限管理
- 用学习曲线 learning curve 来判别过拟合问题
- Libgdx中ScrollPane和Actor事件冲突问题的解决方案
- stm32应用笔记和数据手册
- 1006 Sign In and Sign Out (25)