pythonclass全局变量_Python的变量(全局变量、局部变量、类变量和实例变量)

 2023-09-11 阅读 24 评论 0

摘要:最近有很多小伙伴反应,有点搞不清 Python 的全局变量、局部变量、类变量和实例变量的区别以及用法,那我们今天详细介绍一下这4种变量的作用域和用法。 全局变量 听名字就可以知道该变量的作用范围是全局的,全局变量定义在模块(包)内࿰

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

全局变量

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

python 定义变量、BRAND = "BMW"

def change_brand(new_brand):

BRAND = new_brand

print("new brand is: "+BRAND)

python声明全局变量?def main():

change_brand("宝马")

print(BRAND)

if __name__ == '__main__':

python全局变量。main()

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

354d8551ce38

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

BRAND = "BMW"

python append函数、def change_brand(new_brand):

global BRAND

BRAND = new_brand

print("new brand is: "+BRAND)

Python全局变量和局部变量?def main():

change_brand("宝马")

print(BRAND)

if __name__ == '__main__':

pythonlambda函数?main()

354d8551ce38

局部变量

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

def print_word():

python如何变全局变量,word = "car"

print(word)

def main():

# change_brand("宝马")

# print(BRAND)

print(word)

if __name__ == '__main__':

main()

354d8551ce38

这是因为 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 中的关键字。另外,实例变量只能通过实例对象访问,不能像类变量一样可以通过类名访问,这是因为实例变量存的都是一些实例对象特有的属性值。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/48665.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息