python篇8_python中的变量和访问权限

来源:互联网 发布:四方所 知乎 编辑:程序博客网 时间:2024/06/13 07:44

1.概念

全局变量:在模块内,所有函数方法外,class外的变量【在内存中有唯一地址,所有实例共享这一个变量】

局部变量:在函数方法内,class内,没有用self修饰的变量;【又为临时变量,只在函数内部有效,obj不能访问】

实例变量:在class内的方法里面,并且用self修饰的变量;【所有的实例变量和实例方法(有self参数的方法),都是obj的属性,可以通过obj直接访问】

静态变量【类变量】:在class内,但是在class内的所有方法外的变量;【类变量的访问和修改都需要用这种格式:类名.变量名,或者在使用前,使用global关键字声明该变量(因为python在函数中会屏蔽类变量,如果不显式指明,这个变量只会当做与类变量同名的局部变量,从而出错)】

2.类变量的访问

python的idle中操作可以发现,类和对象的属性都存放在一个字典中[可以用字典扩充的方式简洁的扩充类和对象的属性],可以通过__dict__查看,类自身拥有所有代码提到的属性和方法以及默认的属性方法,但是变量却不是,变量在刚声明之后,通过__dict__查看是没有属性的,即没有属于这个对象的特有属性,因为python的属性访问机制是一个对象的属性查找顺序遵循首先查找实例对象自己,然后是类,接着是类的父类,此时,对象自己的属性字典中找不到对应的属性值,所以就会再去找类的属性字典,有的话就会返回类的属性值。但是如果对象自己设置了自己的属性值,再去访问的时候就只会得到自己设置的对象的值,而不是类的属性值

3.各种访问

<1>实例对象obj可以访问类变量【java中不允许】,可以访问实例变量,可以访问全局变量,可以调用实例方法(class中带self的方法)

<2>类对象class可以访问类变量,全局变量,调用类方法(class中不带self的方法)

<3>在函数内部被使用和调用类变量和类的方法的时候,都要显示调用【类名+.】或者global关键字

<4>实例方法a中调用实例方法b,不能直接写实例方法b的名字,而应该用self.b()来调用,调用类方法c要用类名.c()来调用,调用全局方法d,可以直接调用d()

<5>双下划线修饰的实例方法,只能在当前的class内部通过self调用