Python构造函数

这是我参与更文挑战的第 22 天,活动详情查看: 更文挑战

概述

类是对象的模板,是抽象的。

构造函数__init__是Python魔术方法之一,如图魔术方法

魔术方法

我们通过类模版去创建类的实例对象,然后再调用类定义的功能。

那实例对象的属性是通过什么来初始化的?

这时候Python引入来构造函数__init__

构造函数,会在创建实例对象之后Python会自动执行此方法,把初始化的属性特点放到实例对象里。

1. 构造函数介绍

通过前面的学习,我们知道一个python对象包含三个部分:id(识别码),type(对象类型),value(对象的值)

那么我们进一步深入对象包含的三部分:

  1. id(identity识别码),对象在堆内存的存储地址

  2. type(对象类型),Python六大数据类型

  3. value(对象的值)

    (1) 属性(attribute)

    (2) 方法(method)

我们通过类创建实例对象后,需要定义构造函数__init__()方法。

构造方法用于执行实例对象的初始化工作,即对象创建之后,初始化当前对象的相关的属性,无返回值

构造函数重点

  1. 名称固定,必须为__init__()
  2. 第一个参数固定,必须是:self。self指的是就是刚刚创建好的实例对象。
  3. 构造函数通常用来初始化实例对象的实例属性
  4. 通过类名(参数列表)来调用构造函数,调用后,将创建好的对象返回给相应的变量
  5. 构造函数__init__()方法:初始化创建好的对象,初始化指的是给实例属性赋值值
  6. 创建实例__new__()方法:用于创建对象,但一般都无需重新定义该方法

2. 构造函数底层机制

我们通过栗子来学习构造函数的过程

class Animal:
    def __init__(self,name,food): # Animal的属性特征
        self.name = name
        self.food = food

cat = Animal("Tom","fish")
复制代码

构造函数初始化实例对象过程如下:

new函数创建对象

1.Animal类会通过默认的__new__()方法为实例对象在堆内存中为开辟一个空间

构造函数开辟成员数据空间

  1. 实例对象创建好后,Python会自动调用__init__()方法为对象数据成员开辟内存空间

为属性变量赋值
3. 完成对象数据成员的初始化,每个属性值赋值相应的实例属性变量

敲黑板,重点来啦~

  • Python中的self相当于C++中的self指针,Java 和C#中的this关键字。
  • Python中 self必须为构造函数的第一个参数,名字可以任意更改,但是一般遵守惯例,都叫做self
  • 构造函数只能被调用一次,也就是在new创建完对象之后执行

3. 构造函数实操

class Animal:
    def __init__(self,name,food): # Animal的属性特征
        self.name = name
        self.food = food

    def info(self):        # Animal行为
        print(self.name,'的最喜欢的食物是',self.food)

#创建猫实例
cat = Animal("Tom","fish")
cat.info()
#创建狗实例
dog = Animal("Bob","meat")
dog.info()

复制代码

构造函数运行结果

拓展:

  • 关于子类继承父类,如果子类的__init__()函数没有被重写,则会沿着搜索树找到父类的构造方法去执行父类的构造函数

  • 子类重写了构造函数,则创建实例对象之后,会执行自己的构造函数方法,父类的构造函数不执行

  • 子类重写了构造函数,构造函数可以显式调用父类的构造函数形式如:

      父类.__init__(self)
    复制代码

总结

我们今天学习了构造函数__init__(),其在创建对象之后被Python自动调用初始化实例对象属性数据值,无返回值,并且构造函数不能被显示调用。

创建对象时,如果需要,构造函数可以接受参数。当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数。

每个类必须有一个构造函数,即使它只依赖于默认构造函数

好啦,以上是本期内容,欢迎大佬评论区指正~

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享