广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的__new__、__in
  • 799
分享到

python中的__new__、__in

python__in 2023-01-30 22:01:48 799人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

__new__、__init__、__del__三个方法用于实例的创建和销毁,在使用python的类中,我们最常用的是__init__方法,通常称为构造方法,__new__方法几乎不会使用,这篇文章是基于python3.6为基础来做实验,

__new__、__init__、__del__三个方法用于实例的创建和销毁,在使用python的类中,我们最常用的是__init__方法,通常称为构造方法,__new__方法几乎不会使用,这篇文章是基于python3.6为基础来做实验,主要谈一谈Python的__new__和__init__,__init__ 通常称为构造方法,但其实它是个“初始化方法”,真正的构造方法是 __new__, __init__既然是初始化方法,那么肯定是对对象的初始化,也就是存在一个被初始化的对象

来看第一个例子:

class inch():
def __init__(self):
print("__init__")

def __new__(cls):
print("__new__ ")
print("__new__ ")


__new__
None
 


因为我们没有从__new__返回任何结果,__init__这里不会调用。如果init被调用,我们就会看到我们在init中的打印语句。


再看第二个例子:

class inch():
def __new__(cls):
print("__new__ ")
print(super(inch, cls).__new__(cls))
return super(inch, cls).__new__(cls)
def __init__(self):
print("__init__")


print(inch())

__new__
<__main__.inch object at 0x002BF170>
__init__
<__main__.inch object at 0x002BF170>


用于构建实例的是特殊方法 __new__:是个类方法(不需要使用@classmethod),调用 __init__ 方法时要传入实例,__new__必须返回一个实例。返回的实例会作为第一个参数(即 self)传给 __init__ 方法。注意:__init__不允许返回任何值

 


再看第三个列子:

class inch(float):
def __new__(cls, args=0.0):
cls.new = float.__new__(cls,args*0.0254)
return cls.new
def __init__(self,a):
print("__init__")
print(a)

object1=inch(3)
print(object1.new)

__init__
3
0.07619999999999999

 __init__方法中除了self之外定义的参数,都必须与__new__方法中除cls参数之外的参数保持一致

 

无论我们给超类的__new__传递的是哪个类,它都会创建该类的一个实例,如何我们想要创建一个inch的实例,所以,inch类必须作为第一个参数传递给float.__new__。在类inch的内部,cls指的是inch类,因此,我们需要将cls作为第一个参数传递给对象。

第四个例子:

class B(float):
pass

class inch(float):
def __new__(cls, args=0.0):
B.new = float.__new__(B,args*0.0254)
return B.new
def __init__(self,a):
print("__init__")
print(a)

object1=inch(3)
print(type(object))
print(object1.new)

<class '__main__.B'>
0.0761999999999999

 


最后:__new__是用来创建一个实例的,从 object 类继承的已经很完善。所以我们基本上不需要自己编写 __new__ 方法
第四个例子,一个__new__的应用,著名的单例模式(:python 中 None 对象就是单例):

class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not isinstance(cls._instance, cls):
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance

a=Singleton()
b=Singleton()
print(a is b)

True
 

 


__del__:在需要销毁实例的时候,python解释器会调用__del__方法。Cpython中垃圾回收的主要算法是引用计数,每个对象会统计有多少引用指向自己。当引用计数归零时,对象立即就被销毁

 

--结束END--

本文标题: python中的__new__、__in

本文链接: https://www.lsjlt.com/news/179531.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中的__new__、__in
    __new__、__init__、__del__三个方法用于实例的创建和销毁,在使用python的类中,我们最常用的是__init__方法,通常称为构造方法,__new__方法几乎不会使用,这篇文章是基于Python3.6为基础来做实验,...
    99+
    2023-01-30
    python __in
  • 如何在python中重写__new__
    本篇文章给大家分享的是有关如何在python中重写__new__,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、说明重写 __new__ 方法 一定要 return supe...
    99+
    2023-06-15
  • 详解Python中__new__方法的作用
    目录前言一、__new__方法简介1、初始化数据加载+解析类实例2、初始化数据加载重写new方法+解析类实例二、单例模式1、用new方法如何实现单例模式2、如何控制类仅执行一次初始化...
    99+
    2022-11-13
  • Python中__new__方法有什么用
    这篇文章主要为大家展示了“Python中__new__方法有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中__new__方法有什么用”这篇文章吧。一、__new__方法简介接...
    99+
    2023-06-29
  • Python 中__new__方法的作用是什么
    今天就跟大家聊聊有关Python 中__new__方法的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。__new__ 的作用在Python中__new__方法与__init...
    99+
    2023-06-02
  • Python中__new__和__init__的区别与联系
    __new__ 和 __init__ 的区别主要表现在: __new__ 负责对象的创建而 __init__ 负责对象的初始化。 __new__:创建对象时调用,会返回当前对象的一...
    99+
    2022-11-12
  • Python 中类的构造方法 __New__的妙用
    目录1、概述 2、__new__ 和 __init__ 的区别3、应用1:改变内置的不可变类型4、应用2:实现一个单例5、应用3:客户端缓存6、应用4:不同文件不同的解密方法1、概述...
    99+
    2022-11-12
  • Python中__new__方法有什么作用
    本篇内容介绍了“Python中__new__方法有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、__new__方法简介接下来通过...
    99+
    2023-07-06
  • python中__init__ 和__new__有什么区别
    python中__init__ 和__new__有什么区别?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python的五大特点是什么python的五大特点:1....
    99+
    2023-06-15
  • 实例解析Python中的__new__特殊方法
    __new__ 方法是什么? 如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参 数则是生产所需原料,__init__()方法会按照方法中的语句负责...
    99+
    2022-06-04
    实例 方法 Python
  • 一文详解Python中__new__方法的作用
    前言Python中类的构造方法__new__方法有何作用?Python类中有些方法名、属性名的前后都添加__双下画线,这种方法、属性通常属于Python的特殊方法和特殊属性。通过重写这些方法或直接调用这些方法来实现特殊功能。今天来聊聊构造方...
    99+
    2023-05-14
    Python __new__
  • Python中__init__和__new__方法有什么用
    这篇文章给大家分享的是有关Python中__init__和__new__方法有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。__ init __方法init方法负责对象的初始化,系统执行该方法前,其实该对象...
    99+
    2023-06-02
  • Python的__Init__ 和__New__有什么区别
    这篇文章主要讲解了“Python的__Init__ 和__New__有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的__Init__ 和__New__有什么区别”吧!简...
    99+
    2023-07-06
  • python __init__与 __new__的区别是什么
    这篇“python __init__与 __new__的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2023-07-05
  • 详解Python中的__new__、__init__、__call__三个特殊方法
    __new__: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是self。 ...
    99+
    2022-06-04
    详解 方法 Python
  • Python中class内置方法__init__与__new__作用与区别解析
    目录背景__init__方法作用__new__方法作用__init__ && __new__联系使用__new__的场景定义、继承immutable class使用m...
    99+
    2022-11-11
  • [Python ] python中文件的
    原文地址: http://blog.163.com/qimeizhen8808@126/ 这女孩写的挺好,有值得学习的地方。   1) 文件的打开和创建,关闭  a)文件的打开和创建 主要有两个open()和file()两个方法。它们的功能...
    99+
    2023-01-31
    文件 Python python
  • Python中的defaultdict
    字典(dictionary)是Python中一种常用的数据类型。不同于其他由数字索引的序列,字典是用"键"(key)来索引的。通常表示为dict(key: val, ...),有以下特征: 键可以是任何不可变(immutable)数据类...
    99+
    2023-01-31
    Python defaultdict
  • python中的asyncore
    在Python中,既可直接使用socket类,也可使用socketserver,asyncore等经过封装的类来进行编码。asyncore这个库中主要包含了两个函数:asyncore.loop([timeout[, use_poll[, m...
    99+
    2023-01-31
    python asyncore
  • python中的whitespace
    python中strip()和split()在无参数的情况下使用whitespace做为默认参数,在帮助文档中对whitespace的解释为6个字符,它们是space, tab, linefeed, return, formfeed, an...
    99+
    2023-01-31
    python whitespace
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作