美文网首页
特殊方法 __init__.()

特殊方法 __init__.()

作者: import_hello | 来源:发表于2018-09-19 16:25 被阅读0次

转载须注明出处:简书@Orca_J35

__init__

object.__init__(self[, ...])

在新式类中, __new__ 用于控制新实例的创建过程,__init__ 用于控制新实例的初始化过程。如果 __new__ 的返回值是当前类的实例,之后便会调用该实例的 __init__ 方法,来对实例进行初始化。在完成初始化后才会将实例返回给调用者。

__init__ 的实参由"实例引用"和"构造器实参列表"共同组成,也就是说 __new____init__ 除了第一个参数不同之外,其余参数均相同__init__ 只能返回 None,否则会抛出 TypeError

假设基类中定义了 __init__ 方法,如果派生类中覆写了 __init__ 方法,则在派生类的 __init__ 方法中必须显式调用父类中的 __init__ 方法,以确保能够正确初始化实例的基类部分,如:super().__init__([args...])

a. Tips

  • 在旧式类中并没有 __new__ 方法,只有 __init__ 方法,如果我们定义如下旧类:

    # -*- coding: utf-8 -*-
    # python2
    class oldStyleClass:
        def __new__(cls):
            # 旧式类在构造实例的过程中,不会调用__new__方法
            print("into __new__")
    
        def __init__(self):
            print("into __init__")
    
    
    oldStyleClass()
    

    输出结果将会是:

    into __init__
    

    可见,旧式类在实例化的过程并不会调用 __new__ 方法。

  • 只要返回值是 cls 的实例,便会调用该实例的 __init__ 方法,无论是否已经调用过:

    class AbstractClass(object):
        def __new__(cls, a, b):
            instance = super(AbstractClass, cls).__new__(cls)
            instance.__init__(a, b)
            return instance  # 只要返回实例便会调用init,所以这里会调用两次
    
        def __init__(self, a, b):
            print("into __init__")
    
    
    AbstractClass(1, 2)
    

    输出:

    into __init__
    into __init__
    
赞赏.jpg

相关文章

  • 特殊方法 __init__.()

    转载须注明出处:简书@Orca_J35 __init__ object.__init__(self[, ...])...

  • 特殊方法

  • 特殊方法

  • 面向对象中

    特殊方法• 在类中可以定义一些特殊方法也称为魔术方法• 特殊方法都是形如 xxx()这种形式• 特殊方法不需要我们...

  • Python 特殊方法一览

    Python 特殊方法一览 和运算符无关的特殊方法 和运算符相关的特殊方法

  • 面向对象二

    1. 特殊方法 • 在类中可以定义一些特殊方法也称为魔术方法 • 特殊方法都是形如 __xxx__()这种形式 •...

  • 魔术方法、特殊方法

    __slots__ 默认情况下Python用一个字典来保存一个对象的实例属性,字典浪费了很多内存。Python不能...

  • 特殊布局方法

    关于圣杯布局和双飞翼布局:CSS布局之--淘宝双飞翼布局双飞翼布局介绍CSS控制自适应宽度两三栏布局圣杯布局的实现...

  • python特殊方法(魔术方法)

    例子 用于print的__str__方法 用于len的__len__方法 用于cmp的__cmp__方法 特点 特...

  • *(扩展)定制类

    用特殊方法定制类 ***********************#特殊方法是Python 中用来扩充类的强有力的方...

网友评论

      本文标题:特殊方法 __init__.()

      本文链接:https://www.haomeiwen.com/subject/wnuvgftx.html