Python中的类变量、实例变量、局部变量

Python036

Python中的类变量、实例变量、局部变量,第1张

类体内,所有函数外定义。

所有实例对象共享。

只有通过类名调用时才能修改,通过实例调用时无法修改。

假设某类变量名为“name",如果用该类的某个实例x来为name赋值:x.name = 'xxx',实质是为该实例新定义了一个变量name。且之后无法再通过该实例调用类变量name了。因为使用实例调用某名为“xxx”变量时,若该实例没有名为“xxx”的实例变量,则会去调用名为“xxx”的类变量;若有该名称的实例变量,则该实例无法再直接调用该名称对应的类变量。因此也不推荐通过实例来调用类变量。

即:通过类实例修改类变量的值时,实际是在定义新的与类变量同名的实例变量。

类体内,某函数(一般是__ init __ ())内定义。 “self.变量名”

因为是属于某个具体实例的,因此不能通过类名访问。

如果不在__ init __ () 中调用(该函数会在创建实例时自动调用一次),则只有调用该实例中定义目标实例变量的那个函数后,才能使用目标实例变量。因此最好在__ init __ () 中定义实例变量。

类体内,某函数内定义。

直接在函数内用“变量名=值”的方式进行定义。

函数执行完毕后,该局部变量即被销毁。

其实,从名字就能看出来,Python的类变量和实例变量的区别:

类变量:

是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例。

实例变量:

实例化之后,每个实例单独拥有的变量。

[python] view plain copy

class Test(object):

num_of_instance = 0

def __init__(self, name):

self.name = name

Test.num_of_instance += 1

if __name__ == '__main__':

print Test.num_of_instance

t1 = Test('jack')

print Test.num_of_instance

t2 = Test('lucy')

print t1.name , t1.num_of_instance

print t2.name , t2.num_of_instance

类变量也叫静态变量,也就是在变量前加了static

的变量;

实例变量也叫对象变量,即没加static

的变量;

区别在于:

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

例:

public

class

A{

static

int

a

=

0

//类变量

private

int

b

=

0

//实力变量

}

public

class

B{

public

void

main

(String[]

args){

A

a1

=

new

A()

A

a2

=

new

A()

a1.a

=

3

//

等同于

A.a

=

3

a1.b

=

4

System.out.println(a2.a)

//结果为3

//类变量是针对所有对象的,所以a1改变a,a2的a也改变

System.out.println(a2.b)

//结果为0

//实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量

}

}