python中的__init__ 、__new__、__call__小结
发布时间:2021-07-19 20:10:38
1.__new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身
2.__init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】
3.__call__(self, *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
看具体的例子:
class O(object):
def __init__(self, *args, **kwargs):
print "init"
super(O, self).__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs):
print "new", cls
return super(O, cls).__new__(cls, *args, **kwargs)
def __call__(self, *args, **kwargs):
print "call"
oo = O()
print "________"
oo()
打印出来的是:
new
init
________
call
比如:Python Singleton(单例模式)实现,那我们是不是只是重载一些__new__方法就可以了
class Singleton1(object):
""" 重载new方法"""
def __new__(cls, *args, **kwargs):
if not "_instance" in vars(cls):
cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
return cls._instance
可不可以重载__init__方法呢?明显不可以,因为__init__之前调用了__new__方法,这时候已经生成了一个对象了,没办法实现单例模式


猜你喜欢
- Python单元测试unittest中提供了一下四种装饰器实现测试跳过和预期故障。(使用Python 2.7.13)请查考Python手册中
- 常见的SQL问题:◆选择重复,消除重复和选择出序列有例表:empemp_no name age001 Tom 17002 Sun 14003
- 最近新需求来了,要给系统增加几个资源权限。尽量减少代码的改动和程序的复杂程度。所以还是使用装饰器比较科学之前用了一些登录验证的现成装饰器模块
- 一 前期说明:我运行项目的环境是nginx+php,存储代码用的是gitlab,python版本:3.6 django版本:2.2.1 my
- 语法在python3中,内置函数中已经没有reduce了。要使用reduce,需要从functools模块里引入可以看到,reduce有三个
- 最近使用Python调用百度的REST API实现语音识别,但是百度要求音频文件的压缩方式只能是pcm(不压缩)、wav、opus、spee
- 本文主要介绍了python opencv 找出图像中的最大轮廓并填充,分享给大家,具体如下:import cv2import numpy a
- sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:
- 一、安装FastDFS1-1:执行docker命令安装# 安装trackerdocker run -dti --network=host -
- 在官方网站中对as_index有以下介绍:as_index : boolean, default TrueFor aggregated ou
- 你是否发现,在浩如烟海的应用程序堆里,具有漂亮图标和清爽名字的 App 更容易被用户喜爱。作为开发者,面对这自己的作品,能否自问一句:“从图
- 前言这里先说明一下,网上很多人说阿里规定500w数据就要分库分表。实际上,这个500w并不是定义死的,而是与MySQL的配置以及机器的硬件有
- 翻译:ShiningRay @ Nirvana Studio作者:Douglas Crockford来源:http://www.crockf
- 本文实例分析了Python二分法搜索算法。分享给大家供大家参考。具体分析如下:今天看书时,书上提到二分法虽然道理简单,大家一听就明白但是真正
- Pandas是一个强大的数据处理库,它提供了高性能、易于使用的数据结构和数据分析工具。本文将介绍Pandas常用的数据结构和常用的数据分析技
- 1.触发器概述触发器是SQL Server数据库应用中一个重要工具,是一种特殊类型的存储过程,应用非常广泛。一般存储过程主要通过存储过程名而
- 起步要介绍一个非常方便的 Django 扩展包-- django-hosts 。它能够提供在不同的子域名下访问不同的 app。例如,在项目中
- 1.二进制读取模式rt 读取文本文件(默认值)rb 读取二进制文件file_name = "C:/Users/cheng/Desk
- 一、DBMS_REDEFINITION(在线重定义)参考MOS文档:_How To Partition Existing Table Usi
- Python os.remove() 方法os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError