最近有很多小伙伴反应,有点搞不清 Python 的全局变量、局部变量、类变量和实例变量的区别以及用法,那我们今天详细介绍一下这4种变量的作用域和用法。

全局变量

听名字就可以知道该变量的作用范围是全局的,全局变量定义在模块(包)内,类和函数外,模块内的所有类和方法均可以访问全局变量。一般情况下,如果定义了全局变量不做变量的更新的话,没有问题。一旦要给全局变量重新赋值的时候,往往有的小伙伴会掉坑里,下面我们举个例子:

BRAND = "BMW"

def change_brand(new_brand):

BRAND = new_brand

print("new brand is: "+BRAND)

def main():

change_brand("宝马")

print(BRAND)

if __name__ == '__main__':

main()

以上代码中我们定义了一个全局变量 BRAND = "BMW",然后我们想通过 change_brand 函数对全局变量进行重新赋值,得到如下结果:

发现结果并不符合预期,print(BRAND) 得到的结果还是 BMW 并没有给全局变量 BRAND 重新赋值为 宝马,这是因为我们在 change_brand 函数中如果不声明 global 关键字是索引不到全局变量,相当于在 change_brand 函数中又重新创建了一个与全局变量同名的变量,现将代码修改为:

BRAND = "BMW"

def change_brand(new_brand):

global BRAND

BRAND = new_brand

print("new brand is: "+BRAND)

def main():

change_brand("宝马")

print(BRAND)

if __name__ == '__main__':

main()

局部变量

在介绍全局变量的第一段代码 change_brand 函数中的 BRAND 就是局部变量,局部变量是定义在函数中的变量,其作用域也是在其所属函数内,在所属函数之外调用该局部变量会报错:

def print_word():

word = "car"

print(word)

def main():

# change_brand("宝马")

# print(BRAND)

print(word)

if __name__ == '__main__':

main()

这是因为 word 变量定义在 print_word 函数中,main 函数访问不到该变量,所以会报错,局部变量随着函数被调用而创建,随着函数执行结束而释放。

类变量

类变量也叫静态变量,类变量定义在类中,但不在类的函数中,可以不必创建该类的实例,直接通过类名调用类变量,也可以通过实例名访问类变量,这个可以根据情况灵活采用哪种调用方式:

class Car(object):

color = "blue"

def main():

# change_brand("宝马")

# print(BRAND)

# print(word)

print(Car.color)

car = Car()

print(car.color)

if __name__ == '__main__':

main()

类变量的作用范围为所属类中,并能被由所属类的所有实例对象所访问,什么意思呢?就是小伙伴们通过类 Car 创建出的所有的 Car 的实例对象都可以访问到类 Car 中的类变量 color。

实例变量

对于整个模块(包),定义了全局变量,可以让模块中的所有类的函数共享;对于函数来说,如果不想将自己的私有变量共享,可以定义局部变量,那么除了函数本身外,“外界” 不会知道函数内部定义的变量;对于类,有了类变量,可以供类中和有血缘关系的类或者实例对象之间进行共享使用,也可以简单理解类变量为各个实例对象的 “共有属性值”,比如,校园的选课系统面向的全是学生,那么属性 title = student 可以声明成类变量,但是每个学生的学号,身高,体重等属性都是实例对象 Student 所特有的啊,那么该如何来描述这些特有属性呢?这就要靠实例变量了,这里我们引用上一篇介绍 Python 的类 class 的例子学习一下实例变量的用法:https://www.jianshu.com/p/c662dc5497cc

class Student(object):

tuition_fee = 12000

def __init__(self, name, sex):

print("这是类的初始化方法")

self.name = name

self.sex = sex

print("类初始化完毕")

def speak(self):

print("student, name=", self.name, "; sex=", self.sex, "; tuition_fee=", self.tuition_fee)

def main():

student = Student("wangcai", "male")

student.speak()

student.name = "xiaoqaing"

student.speak()

if __name__ == '__main__':

main()

小伙伴们可以观察到,实例变量都是用 self 来修饰,表示类的实例对象,当然也可以把 self 换成别的标识,这是因为 self 并不是 Python 中的关键字。另外,实例变量只能通过实例对象访问,不能像类变量一样可以通过类名访问,这是因为实例变量存的都是一些实例对象特有的属性值。

pythonclass全局变量_Python的变量(全局变量、局部变量、类变量和实例变量)相关推荐

  1. pythonclass全局变量_python的局部变量,全局变量,类变量,实例变量

    定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...

  2. python大盘点:全局变量、局部变量、类变量、实例变量

    python大盘点:全局变量.局部变量.类变量.实例变量 1.前沿 相信同学们一定懵逼过,那是,不懵逼就不正常了,现在由我为了大家在轻松的氛围下逐个说明 标题中所述的 名词 2.定义 a.全局变量:在 ...

  3. 静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)

    区分静态变量.动态变量.内部变量(局部变量).外部变量(全局变量) 静态变量.动态变量.内部变量(局部变量).外部变量(全局变量) 变量的分类来看 静态变量.动态变量.内部变量(局部变量).外部变量( ...

  4. Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项

    局部变量:方法中定义的变量. 成员变量(类似C中的全局变量):成员变量定义在方法体和语句块之外.成员变量就概括描述了类中的变量,不区分static.是以下变量的统称. 类变量(静态变量):独立于方法之 ...

  5. python 类可以调用实例变量_python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...

    1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过"类名()& ...

  6. Java千百问局部变量、类变量、实例变量有什么区别

    Java千百问局部变量.类变量.实例变量有什么区别 局部变量.类变量.实例变量有什么区别 在聊局部变量.类变量.实例变量有什么区别之前,我们需要了解一下Java变量. 1.Java变量是什么 在数学世 ...

  7. python 类可以调用实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...

    注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...

  8. python 实例变量_Python的类变量和实例变量详解

    Asuka 什么是类变量? class Student: name = 'Asuka' age = '18' ... 上面定义的name和age就是类变量 什么是实例变量? class Student ...

  9. Java中的类变量和实例变量的区别

    类变量也叫静态变量,也就是在变量前加了static 的变量: 实例变量也叫对象变量,即没加static 的变量: 区别在于: 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变, ...

最新文章

  1. [NOI2011]Noi嘉年华
  2. 使用LSTM神经网络进行音乐合成(数据格式,模型构建,完整源码)
  3. 表格转化为Latex代码
  4. AngularJS 学习笔记 - $http.post 跟后台交互
  5. 2020年,朋友圈的正确打开方式!
  6. dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...
  7. SAP ABAP打印MM采购发票打印开发
  8. YAML文件(.yml)中的键(key)通过变量引用来设置
  9. 鸿蒙报名什么时候推送,鸿蒙系统手机版什么时候推送?鸿蒙系统手机版推送时间详解...
  10. ×××与字符串的相互转换
  11. rm如何在Linux中删除一个大文件
  12. 「べきだ」、「わけだ」、「はずだ」在使用中,都有“ 应该 ”的含意
  13. ps aux 和ps -aux和 ps -ef的选择
  14. 一网打尽Android UI 控件教程
  15. wms仓库管理系统具有四大功能
  16. ROS2.9.27架设网吧软路由实战篇之端口映射与回流
  17. 线性代数(一)—— 行列式
  18. 台式机的无线网卡连接wifi,能连上但丢包严重,无法上网
  19. RAW和QCOW2 两种存储设备格式区别
  20. ubuntu下qt模拟键盘按键按下_基于QT的跨平台虚拟键盘设计与实现

热门文章

  1. BT3入门之中文语言支持
  2. 自考--运筹学--计算题总结
  3. zouxy09博客原创性博文导航
  4. 相机标定(3) opencv中solvePnPRansac()和solvePnP()计算外参数
  5. 7-8 最长连续递增子序列 (15 分)
  6. ios 滑动手势事件 与cell touchevent事件_深入浅出~手势操作原理分析
  7. 1137.第N个泰波那契数
  8. 操作系统进程线程程序
  9. mimo+matlab代码,mimo-matlab代码
  10. 电脑解压,WinXP电脑上怎么解压文件?