阅读 81

Python实例内存浅析

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

复习回顾

我们上一期了对面向对象编程有了基本的认识。

我们去分析事物时,会不断去拆解,直到找到事物的本质。

同理,面向对象思想也这样的,把一个复杂的任务,去分类拆解不同模块,然后再使用面向过程去实现每个模块的具体功能。

通过面向对象的思维,我们有了类和对象的概念。

类是对象的模板,对象是类的具体实物

本期,我们来学习类的实物对象,也叫实例。

1.实例属性

1.1 实例属性简介

实例属性是从属于实例对象的属性,也称为实例变量。

  • 实例属性一般放在__init__()方法里

    self.实例属性名 = 初始值
    复制代码
  • 在类的其他实例方法中,通过self进行访问

      self.实例属性名
    复制代码
  • 创建实例对象后,通过实例对象访问

      Obj1 = 类名() #创建对象
      obj1.实例属性名 = 值 # 赋予新对象的属性(特征)
    复制代码

实例属性

1.2 实例属性内存分析

我们仍然拿Animal类来当案例,进行分析。

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

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

#创建猫实例
cat = Animal("Tom","fish")
cat.voice = "miaomiao" # 创建cat新属性voice
cat.where = "China" # 创建cat新属性where
cat.like_food()
复制代码
  1. 首先会在堆内存中创建类对象Animal

创建Animal类

  1. Animal("Tom","fish")会调用类的构造方法在堆内存中创建属性对象,并赋给栈内存中变量cat

创建属性对象

  1. 为cat实例添加新的属性voice和where,则通过cat来添加到属性对象里

新增属性

总结:实例属性是从属于实例对象,创建的对象添加的新的属性是不会影响另外的对象属性特点。

2. 实例方法

2.1 实例方法介绍

实例方法是从属实例对象的方法,只对对象进行调用

实例方法在类的范围里进行定义,格式如下:

def 方法名(self,[形参列表]):
    函数体
复制代码

方法的调用格式如下:

对象.方法名(实参列表)
复制代码

实例方法

注意:

  1. 定义实例方法时,第一个参数必须是self,self指当前对象
  2. 调用实例方法时,不能给self传参,self是由解释器进行自动传参的

调用实例方法

函数与实例方法的区别

  1. 都是用来完成一个功能的语句块,本质一样
  2. 方法调用时,通过对象来调用,方法从属于特定实例对象,普通函数没有这个特点
  3. 方法定义时需要传递self,函数是不需要的
2. 实例方法内存分析

接着我们刚刚知道了实例属性,哪我们接着Animal类进行学习实例方法内存操作

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

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

#创建猫实例
dog = Animal("Bob","meat")
dog.like_food(dog)
复制代码
  1. 在堆内存中创建Animal类(模具),并且类里面有一个lie_food方法
  2. Animal("Bob","meat")创建dog对象,里面包含dog属性以及like_food方法

创建对象 3.dog.likefood()是dog属性里面的方法like_food调用类里面的like_food的方法时需要传入self(self是对象的地址) 4. 因此,dog.like_food()与Animal.likefood(dog)运行效果一样的

Python内部解释实例方法

总结

本次只要学习的类的实例对象,对实例属性和实例方法的底层逻辑有了清晰的认识和掌握。

接下来,我们将学习面向对象类相关的底层原理~

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

文章分类
后端
文章标签