Advertisement

深入解析Python的__new__、__init__和__call__方法

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


简介:
本篇文章详细探讨了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()`.

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 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()`.
  • Python__new____init__作用与区别详
    优质
    本文详细解析了Python中的两个重要魔术方法——`__new__`和`__init__`。解释它们各自的功能及其在对象创建过程中的作用,并探讨两者之间的差异,帮助读者深入理解面向对象编程的关键概念。 【相同点】 二者都是Python面向对象编程中的特殊方法。__new__用得较少,而__init__则更为常用。 【不同点】 - __new__在实例创建之前被调用,它的职责是生成并返回一个新的实例对象,因此它是一个静态方法。 - __init__在新实例创建之后被调用,在这里可以为这个刚创建的实例设置属性值。它是用来初始化类的一个实例的方法。 总结来说,当一个类的对象要被创建时,首先会调用__new__来生成新的对象实例,并将该返回的实例传递给随后调用的__init__方法进行进一步的配置和初始化工作。
  • 关于Python特殊__call__()使用详
    优质
    本文详细介绍了Python中的特殊方法`__call__()`及其用途。通过实例讲解了如何定义和应用该方法来使对象像函数一样调用,帮助读者掌握其灵活运用技巧。 今天为大家分享一篇关于Python特殊函数__call__()的使用详解文章,具有很好的参考价值,希望能对大家有所帮助。一起跟随本段落了解更多信息吧。
  • Python find()应用技巧
    优质
    本文章详细探讨了Python编程语言中find()函数的工作原理及其在字符串操作中的应用技巧,帮助读者掌握其使用方法。 本段落详细介绍了Python中的find()方法的使用,是学习Python的基础知识,有需要的朋友可以参考。
  • Python find()应用技巧
    优质
    本文章详细介绍了Python中find()函数的工作原理及其在字符串操作中的多种应用场景和使用技巧。 `find()` 方法用于判断字符串 `str` 中是否存在某个子串,并返回该子串的起始索引位置。 语法如下: ```python str.find(sub, beg=0, end=len(str)) ``` 参数: - `sub`:要搜索的子字符串。 - `beg`:开始搜索的位置,默认为 0。 - `end`:结束搜索的位置,默认到整个字符串的末尾。 返回值: 如果找到该子串,方法将返回其起始索引;否则返回 -1。 示例: ```python str1 = this is string example ``` 这段代码片段展示了如何使用 `find()` 方法。
  • Python中where()函数应用
    优质
    本文章详细介绍了Python中的where()函数,并提供了多种应用实例和技巧,帮助读者深入理解并掌握该函数在条件选择与数组操作方面的强大功能。 本段落主要介绍了Python中where()函数的用法,并分享了一些相关的使用技巧。希望这些内容对大家有所帮助。
  • Python交叉验证留出
    优质
    本篇文章详细探讨了Python编程语言中常用的两种机器学习模型评估技术——交叉验证法与留出法。文中不仅解释这两种方法的工作原理,还提供了实际应用示例代码,帮助读者理解和掌握如何在实践中有效地使用这些工具来提高预测模型的准确性。 在机器学习领域,我们通常使用训练集来训练模型,并用测试集评估模型的性能。我们的目标是使模型在测试集上的表现最佳。然而,在实际应用中,往往只有一个包含m个观测数据的数据集D,需要同时用于训练和验证阶段。 为了实现这一目的,我们需要对原始数据进行划分。理想的划分方法应当满足以下三个标准: - 训练样本数量足够多; - 模型的计算复杂度在可接受范围内; - 应尽量减少不同分组方式带来的结果差异性。 我们将详细探讨留出法和交叉验证这两种常见的模型评估策略,并提供Python代码实现。自助法(Bootstrapping)的相关内容将在后续文章中进行介绍。 1. 留出法 这是最直接且广泛使用的方法,其核心思想是简单明了的。
  • Python交叉验证留出
    优质
    本篇文章详细探讨了在Python编程语言中如何运用交叉验证法及留出法进行模型评估与选择,旨在帮助读者理解这两种方法的原理及其应用实践。 本段落详细介绍了如何使用Python实现交叉验证法与留出法,并通过示例代码进行了深入讲解。对于学习或工作中需要应用这些方法的读者来说,具有一定的参考价值。希望感兴趣的朋友们能够跟随文章一起学习和探索。
  • Array.sort()排序
    优质
    本篇文章将对JavaScript中常用的Array.sort()函数进行详细剖析,介绍其内部工作原理及不同的排序实现方式。适合前端开发人员阅读学习。 数组的 `sort()` 方法用于在原数组上对元素进行排序,并不会创建新的数组副本。如果没有提供参数,则默认会按字母顺序(确切地说是字符编码顺序)排列数组中的元素,首先将所有需要比较的元素转换为字符串形式。 若需按照其他规则排序,可以传入一个自定义的比较函数作为参数。这个函数接收两个值 `a` 和 `b` 作为输入,并返回一个数字来指示这两个值之间的相对次序: - 如果根据给定的标准,认为 a 应该排在 b 的前面,则需要返回一个小于0的结果。 - 相反地,如果 a 应该位于 b 后面,则比较函数应当返回大于零的数值。