Advertisement

Python中__new__和__init__的作用与区别详解

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文详细解析了Python中的两个重要魔术方法——`__new__`和`__init__`。解释它们各自的功能及其在对象创建过程中的作用,并探讨两者之间的差异,帮助读者深入理解面向对象编程的关键概念。 【相同点】 二者都是Python面向对象编程中的特殊方法。__new__用得较少,而__init__则更为常用。 【不同点】 - __new__在实例创建之前被调用,它的职责是生成并返回一个新的实例对象,因此它是一个静态方法。 - __init__在新实例创建之后被调用,在这里可以为这个刚创建的实例设置属性值。它是用来初始化类的一个实例的方法。 总结来说,当一个类的对象要被创建时,首先会调用__new__来生成新的对象实例,并将该返回的实例传递给随后调用的__init__方法进行进一步的配置和初始化工作。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Python__new____init__
    优质
    本文详细解析了Python中的两个重要魔术方法——`__new__`和`__init__`。解释它们各自的功能及其在对象创建过程中的作用,并探讨两者之间的差异,帮助读者深入理解面向对象编程的关键概念。 【相同点】 二者都是Python面向对象编程中的特殊方法。__new__用得较少,而__init__则更为常用。 【不同点】 - __new__在实例创建之前被调用,它的职责是生成并返回一个新的实例对象,因此它是一个静态方法。 - __init__在新实例创建之后被调用,在这里可以为这个刚创建的实例设置属性值。它是用来初始化类的一个实例的方法。 总结来说,当一个类的对象要被创建时,首先会调用__new__来生成新的对象实例,并将该返回的实例传递给随后调用的__init__方法进行进一步的配置和初始化工作。
  • 深入Python__new____init____call__方法
    优质
    本篇文章详细探讨了Python中的三个重要魔术方法:__new__、__init__ 和 __call__。通过具体示例解释它们的功能与区别,帮助读者深入了解这些机制在类创建及对象行为定制中的作用。 `__new__`: 对象的创建是一个静态方法,第一个参数是cls。(因为对象还未被创建出,所以不可能使用self作为参数) `__init__`: 对象的初始化是一个实例方法,第一个参数是self。 `__call__`: 使对象可调用。注意这指的是已经存在的对象而非类本身。先有创建后才有初始化,即首先执行的是`__new__`, 然后再执行`__init__`. 以上解释可能不够直观, 下面通过例子来进一步说明: 1. 对于`__new__` ```python class Bar(object): pass class Foo(object): def __new__(cls, *args, **kwargs): return Bar() print(Foo()) # 输出的是Bar的实例,而非Foo的实例。 ``` 这段代码中定义了两个类,`Foo`和`Bar`, `Foo.__new__()`方法返回了一个新的`Bar`对象。所以当调用`Foo()`时, 返回值是基于`Bar()`.
  • Pythonjson.dumps()json.dump()
    优质
    本文详细解析了Python中的json.dumps()和json.dump()两个函数的区别与应用场景,帮助读者更好地理解和使用这两个函数进行数据序列化。 以前写的比较简单,只有几句话,最近发现这篇文章是本博客阅读量最大的一篇文章,觉得这样有种把读者骗进来的感觉,于是又细化了一些内容。如果还有需要改进的地方,请随时指出。 首先介绍一下基本功能:`dumps` 是将字典(dict)转换成字符串(str),而 `loads` 则用于将字符串还原为字典格式。类似地,`dump` 和 `load` 也具有相似的功能,但它们与文件操作相结合使用。 下面是一些代码示例: ```python In [1]: import json In [2]: a = {name: wang, age: 29} In [3]: b = json.dumps(a) In [4]: print(b, type(b)) ``` 输出结果为: ``` {name: wang, age: 29} ```
  • Pythongetsizeof()getsize()
    优质
    本文详细解析了Python中的`getsizeof()`函数及其与不存在的`getsize()`之间的区别。通过实例代码讲解如何正确使用`getsizeof()`来获取对象的实际内存大小,帮助开发者避免常见的误解和错误。 `sys.getsizeof()` 函数用于获取程序中声明的整数变量在内存中的大小(以字节为单位)。例如: ```python import sys print(sys.getsizeof()) # 输出:40,因为没有提供参数,默认返回对象类型的大小。 print(sys.getsizeof(a)) # 如果 a 是一个已定义的整数变量,则输出该整数所占的内存空间大小(以字节为单位)。 print(sys.getsizeof(1)) # 整数值 1 占用的空间通常是 28 字节,但实际结果可能因 Python 版本和平台而异。 print(sys.getsizeof(a1))# 如果 a1 是一个已定义的整数变量,则输出该整数所占的内存空间大小(以字节为单位)。 ``` `os.path.getsize(path)` 函数可以获取指定路径 `path` 下文件的实际大小,同样是以字节为单位。例如: ```python import os print(os.path.getsize(example.txt)) # 输出 example.txt 文件的大小。 ``` 计算机中的数据量通常以字节、千字节(KB)、兆字节(MB)等进行换算:1 KB = 1024 字节,1 MB = 1024 KB。
  • Python模块
    优质
    本文详细解析了Python编程语言中的模块和包的概念及其区别,帮助开发者更好地组织代码结构。 本段落详细介绍了Python中的模块(Module)与包(Package)的区别,并通过示例代码进行了深入讲解。文章内容对于学习或工作中遇到相关问题的朋友具有参考价值,希望对大家有所帮助。
  • Python__init__.py__all__
    优质
    本篇指南深入解析了Python中两个重要概念——__init__.py和__all__。文章探讨了它们的功能及在项目结构管理中的应用,帮助开发者更好地组织代码。 __init__.py 是什么?通常在一个工程文件里面,你可能会发现在某个文件夹下面会有一个命名为 __init__.py 的 Python 文件。 为什么需要 __init__.py?在一个工程文件下,我们可能会有很多的 py 文件(模块),这些文件数量较多时管理起来很不方便。这时候我们可以创建一个包(package)来对这些文件进行管理,即将具有共同特征的文件放在同一个 package 里面。那么该如何创建一个 package 呢?其实很简单,就是新建一个文件夹,并在该文件夹内新建一个 __init__.py 文件即可。这样一来,Python 就会把这个文件夹视为一个包来看待了。 创建 package 的目的是为了方便管理模块。
  • Python__init__.py__all__
    优质
    本文深入解析了Python中重要的特殊文件__init__.py及其内部的__all__属性,帮助读者更好地理解和运用包初始化及模块导出机制。 在工程文件夹里经常会看到一个名为`__init__.py`的Python文件。 为什么要使用`__init__.py`呢? 在一个工程项目中,通常会包含许多个`.py`文件(模块)。当这些文件数量较多时,管理起来就会变得复杂和不便。这时可以创建一个包(package)来帮助组织这些文件,即将具有共同特征或功能相似的文件归类到同一个package内。 要如何创建这样的包呢?其实很简单:只需要新建一个文件夹,并在该文件夹中添加一个`__init__.py`文件即可。这样Python就会把这个文件夹识别为一个包进行处理了。 引入包的主要目的是为了方便管理和组织模块,从而提高代码的可维护性和复用性。
  • Python基础进阶1.6:类对象、__init__()self使
    优质
    本教程详细讲解了Python中的类与对象概念,以及如何使用初始化方法`__init__()`和关键字参数`self`来构建更强大的程序。适合初学者深入学习。 Python基础进阶1.6:面向对象之类、对象及__init__()、self相关用法讲解,精简视频;更多内容关注微信公众号:深度学习社区DLC。