【PYTHON】论Python的类中的私有变量、共有变量、全局变量、局部变量

0 引言

Python语言中,一切皆对象。对于Python语言中的变量,我想大家都不陌生,但是在Python中,变量也有很多种类。如私有变量、共有变量、全局变量、局部变量等。这里给大家介绍Python类(class)中的变量之间的区别。参考代码:


class G():
    fly = False #类中的全局变量
    def __init__(self):
        selg._age = 1 #加一个下划线,是一种不成文的规定,意思是该变量是私有变量
        self.long = 2 #普通变量
        self.__width = 3 #有两个下划线,是一种“真”私有变量
    def run(self):
        r = 4 #局部变量
        print("I am running!.")

1 变量说明

1.1 私有变量

私有变量,顾名思义,是一个只能被当前类或者方法或者函数才能访问的变量,其他的类或者方法或者函数是不能直接访问的。这里说不能直接访问,也就是说可以通过间接的方式访问。这里就拿引言中的参考代码进行举例说明。

从代码中我们可以看到,我们在类中定义了5个变量,当私有、共有,局部、全局都有。但是如果我们对该类进行实例化之后,我们可以查看该类被实例化之后的对象的参数,截图如下:


从截图中,我们可以看到,对象f能够直接引用类中的全局变量fly,但是在对象f的__dict__对象中并没有存放该全局变量,而在__init__()构造方法中的long变量也是可以被对象f直接引用的,这就是说全局变量是被当做类中的一个属性来存放,在Python中。 


1.1.1 访问私有变量

对于上面代码中定义的两个私有变量,其他的类或者方法也不是不可以访问,只是稍微麻烦一些。我们在截图中可以看到,在f的__dict__中,存放了两个私有变量的键值对,但是对于双下划线的私有变量而言,它的名字较之我们定义时的名字还是有所区别。这里有一个命名规则:_classNamevalueName,其中className是定义的类的名称,valueName是我们定义的双下划线的私有变量的名称(其中包括双下划线)。我们可以通过这种方式对其进行访问,实例如下:


              

1.2 局部变量

局部变量,是指该变量的生命周期不会和程序的全部生命周期同步生存或者死亡。也就是说,程序在还没有结束之前,局部变量就会被释放掉,因为它的生命周期结束了。上面的截图中,在类中的run()方法中定义的r变量是一个局部变量,我们根本不可能调用它,因为它在run()方法运行完毕之后,属于它的(局部变量r)那一块内存空间就会被Python解释器给释放掉,所以Python解释器也不会保存r的值。

1.3 全局变量

全局变量,是一个相对的概念,对于整个程序而言,有可以在整个程序的任何代码块中都能被访问的变量,被称作全局变量。也有在类中能够被该类的任何代码块都能访问到的变量,也被称作全局变量。所以这里是一个相对的概念。代码定义的fly变量以及构造方法中的long变量都是全局变量,因为在long之前加了一个self的前缀,所有在整个类中,该long变量也是全局变量,至少在该类中的任何地方都可以访问到该变量。全局变量被当做类的一个属性来存储,所以可以说直接通过.的访问方式直接访问,访问如下:


                        

1.4 公有变量

公有变量,也就是说该变量能够被该程序文档中任何代码块调用或者其他的程序文档中的任何代码块调用(import导入的模块),概念上与全局变量有些交叉。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值