pythonclass全局变量_Python的变量(全局变量、局部变量、类变量和实例变量)
最近有很多小伙伴反应,有点搞不清 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的变量(全局变量、局部变量、类变量和实例变量)相关推荐
- pythonclass全局变量_python的局部变量,全局变量,类变量,实例变量
定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...
- python大盘点:全局变量、局部变量、类变量、实例变量
python大盘点:全局变量.局部变量.类变量.实例变量 1.前沿 相信同学们一定懵逼过,那是,不懵逼就不正常了,现在由我为了大家在轻松的氛围下逐个说明 标题中所述的 名词 2.定义 a.全局变量:在 ...
- 静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)
区分静态变量.动态变量.内部变量(局部变量).外部变量(全局变量) 静态变量.动态变量.内部变量(局部变量).外部变量(全局变量) 变量的分类来看 静态变量.动态变量.内部变量(局部变量).外部变量( ...
- Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项
局部变量:方法中定义的变量. 成员变量(类似C中的全局变量):成员变量定义在方法体和语句块之外.成员变量就概括描述了类中的变量,不区分static.是以下变量的统称. 类变量(静态变量):独立于方法之 ...
- python 类可以调用实例变量_python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...
1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过"类名()& ...
- Java千百问局部变量、类变量、实例变量有什么区别
Java千百问局部变量.类变量.实例变量有什么区别 局部变量.类变量.实例变量有什么区别 在聊局部变量.类变量.实例变量有什么区别之前,我们需要了解一下Java变量. 1.Java变量是什么 在数学世 ...
- python 类可以调用实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...
注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...
- python 实例变量_Python的类变量和实例变量详解
Asuka 什么是类变量? class Student: name = 'Asuka' age = '18' ... 上面定义的name和age就是类变量 什么是实例变量? class Student ...
- Java中的类变量和实例变量的区别
类变量也叫静态变量,也就是在变量前加了static 的变量: 实例变量也叫对象变量,即没加static 的变量: 区别在于: 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变, ...
最新文章
- [NOI2011]Noi嘉年华
- 使用LSTM神经网络进行音乐合成(数据格式,模型构建,完整源码)
- 表格转化为Latex代码
- AngularJS 学习笔记 - $http.post 跟后台交互
- 2020年,朋友圈的正确打开方式!
- dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...
- SAP ABAP打印MM采购发票打印开发
- YAML文件(.yml)中的键(key)通过变量引用来设置
- 鸿蒙报名什么时候推送,鸿蒙系统手机版什么时候推送?鸿蒙系统手机版推送时间详解...
- ×××与字符串的相互转换
- rm如何在Linux中删除一个大文件
- 「べきだ」、「わけだ」、「はずだ」在使用中,都有“ 应该 ”的含意
- ps aux 和ps -aux和 ps -ef的选择
- 一网打尽Android UI 控件教程
- wms仓库管理系统具有四大功能
- ROS2.9.27架设网吧软路由实战篇之端口映射与回流
- 线性代数(一)—— 行列式
- 台式机的无线网卡连接wifi,能连上但丢包严重,无法上网
- RAW和QCOW2 两种存储设备格式区别
- ubuntu下qt模拟键盘按键按下_基于QT的跨平台虚拟键盘设计与实现