Python 爬阶梯 | 类的变量和实例的变量到底有什么区别?

当我们在定义一个类的时候,常常会定义到变量,而在定义变量的时候,可能我们会在不同的位置定义,比如这样:

这里我们定义了一个 Person 类,在这个类里面我们定义了一个 money 变量以及一个 init 方法。

什么是类变量和实例变量?

其中的 money 就是类变量,它主要定义在类中,但是不在实例方法之中。

而实例变量指的是,在实例方法中定义的变量,比如我们上述定义的 name 和 age 就是实例变量。

那么它们有什么区别呢?

我们先来实例化出两个对象, p1 和 p2 :

我们知道,这时候它们各自独立,都拥有自己的属性相关:

那么它们都去调用类变量会是怎样的呢?也就是我们刚刚定义的类变量 money。

可以看到,p1 和 p2 这两个对象都可以去调用类的变量,而且它们的值都是一样的,这时候我们试着修改一下类变量 money 的值:

我们把 10000 块钱改成 520 ,这时候我们再通过刚刚创建的对象去调用 money:

可以看到,都直接改变了,p1 和 p2 这两个对象表示: wdnmd ,怎么老子 10000 块钱缩水了?

到这里你可能发现了:

  • 1、类变量是定义在类中,实例方法外的。
  • 2、类变量的数据是存储在类中的
  • 3、类变量可以被共享,也就是说,所有类的实例都可以访问这个类变量
  • 4、类变量如果被改变了,所有实例都会受到影响

实例的行为与变量的关系

接着我们再来看看实例变量,我们试着通过实例来修改类变量,看看会产生什么样的效果,比如现在 p1 和 p2 的 money 都是 520 :

接着我们来修改 p1 的 money ,改成 80000:

这时候我们再来看看它们各自的 money:

这时候你可能会有疑问,不是说类变量是共享的么?改变类变量会影响到其它的实例么?为什么这里的 p2 的 money 还是 520?

本文隐藏内容 登陆 后才可以浏览

发表回复