python 中的__new__方法
1.有关__new__方法的介绍
__new__方法调用在构造方法构造实例之前,即在__init__方法执行之前,我们可以这样理解,他的作用是决定是否适用这个__iint__方法来构造实例,但是需要注意,__new__只出现在新式类中,在经典类中没有这个方法.本质上__new__是一个静态方法.
2.有关__new__的使用
上面我们介绍__new__方法,下面我们来看一下他是如何使用的
class User(object):
def __init__(self,name):
self.name = name
print("__init__方法被调用") @staticmethod
def __new__(cls, *args, **kwargs):
print("__new__方法被调用")
return object.__new__(cls) if __name__ == '__main__':
u1 = User("name")
上面代码的执行结果如下:

通过上面的结果我们可以知道,__new__方法执行在__init__方法之前
我们在来解释下他的用法:
1)__new__方法必须有参数cls,cls指的是当前正在实例化的类
2)__new__必须有返回值,返回的是实例,如果是使用当前类构造的实例,可以用object.__new__(cls),也可以用父类名.__new__(cls)
3)__init__方法的参数self其实就是__new__方法返回的实例对象,在这个__init__方法中还可以对这个实例进行其他的操作,比如添加一些属性等
注:实际上在新式类中我们不是必须要重写这个__new__方法,python是默认调用这个类的直接父类的__new__方法来构造实例的
通常这个__new__方法用在单例模式的实现上
python 中的__new__方法的更多相关文章
- Python中的__new__()方法与实例化
@Python中的__new__()方法与实例化 __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...
- Python中的__new__()方法的使用
__new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known cas ...
- 通俗的讲解Python中的__new__()方法
2020-3-17更新本文,对本文中存争议的例子进行了更新! 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前,让我突然 ...
- 关于python中的__new__方法
在上篇中,简单的比较了下new方法和init方法,然后结合网上的东西看了一点,发现..看书有的时候说的并不全面. __new__方法是一个类方法,主要作用是来指导如何生成类的实例, 主要用于,当需要生 ...
- Python3中的__new__方法以及继承不可变类型类的问题
最近在学到Python中的__new__方法时被弄懵逼了,一开始实在是很难理解,有很多地方想不通(本人强迫症).最近自己慢慢思索得出了能说服自己的理解: 说__new__方法之前要先提到__init_ ...
- 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑
上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...
- Python中的__new__和__init__
Python中的__new__和__init__ 写了这么多的class,现在才知道还有个__new__方法, 那么它和__init__有什么区别呢? class TestCls(): "& ...
- 一个案例深入Python中的__new__和__init__
准备 在Python中,一切皆对象. 既然一切皆对象,那么类也是对象,我们暂且称之为 类对象.来个简单例子(本篇文章的所有案例都是运行在Python3.4中): class foo(): pass p ...
- python中的replace()方法的使用
python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...
随机推荐
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- Linux新手随手笔记1.4
计划任务服务程序 计划任务 at 命令 一次性的 crond 服务 周期性的 23:29执行reboot命令(重启服务器) at -l 查看当前的计划任务 at ...
- ABP之session
ABP提供了一个IAbpSession接口,可以在不使用ASPNET的session的情况下获取当前用户和租户.IAbpSession还被ABP中的其他结构(如设置和授权系统)完全集成和使用. 注入s ...
- [Alpha阶段]第七次Scrum Meeting
Scrum Meeting博客目录 [Alpha阶段]第七次Scrum Meeting 基本信息 名称 时间 地点 时长 第七次Scrum Meeting 19/04/11 大运村寝室6楼 35min ...
- PHP二维数组去重(指定键名)
本例对二维数组中某个指定键名进行去重,发现网上大多使用array_unique或是foreach遍历等方式去重,效果不佳且较为繁琐. 本文以二维数组去重为引,介绍array_column函数的三种用法 ...
- CMDB(Configuration Management Database)资产管理系统和 运维自动化
一.传统运维方式和自动化运维的区别 二.CMDB的介绍 三.CMDB的四种方式 四.项目的目录架构介绍以及配置文件的升级编写 五.比较low的项目架构书写 六.可插拔式收集资产 七.对收集的服务器信息 ...
- Flex弹性布局以及box-sizing
(本篇内容代表本人理解,如有错误请指出!) box-sizing box-sizing 属性用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型.可以使用此属性来模拟不正确支持CSS盒子模型规范的 ...
- 1.nginx_add_after_body
语法: add_before_body uri;默认值: —配置段: http, server, location发起一个子请求,请求给定的uri,并且将内容追加到主题响应的内容之前. 语法: add ...
- Comet OJ Contest #2
A:暴力,显然每两次至少翻一倍. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf ...
- nginx 项目部署
一.nginx 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web 网络服务是一种被 ...