python 类变量
2014-08-07 16:16
85 查看
在python的类中,类的属性有两种作用域:类变量,实例变量。
类似于java和c++中的static变量与一般变量的区别。类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。
类变量和实例变量在操作上的区别
1.
访问权限
类变量通过类名点操作访问也可以通过实例点操作访问className.varobjectName.var
实例变量只可以通过实例名点操作访问objectName.var
2.
类变量修改后的表现
通过className.var修改类变量,该类和所有实例所共享的数据将被修改,再次通过类或实例访问得到的将是新的数据。
通过objectName.var修改类变量,其效果将仅仅作用在该实例上,再次通过类或其它实例访问得到的仍然是旧的数据。但这一修改方式将对该类变量实例化,其结果是该实例将得到一个单独的该变量拷贝,此后此对象不再与类共享该名称的变量(实例化一说,是个人对这一现象的定义,还未找到权威描述)
在类设计中,经常遇到两种类型的变量:类变量和实例变量。
简单的说,类变量(class variable)被该类的所有实例可以共享的变量;如果某个实例修改了该变量,这种变化可以被其他实例看到。
实例变量(object variable, instance variable)属于实例私有;对实例变量的操作不会影响到其他实例对象。
举个简单的例子,就很清楚了。
#!/usr/bin/env python
class Person(object) :
count_beans = 0
def __init__(self, name) :
self.name = name
self.count_beans = 0
def pick(self) :
self.count_beans += 1
Person.count_beans += 1 #self.__class__.count_beans += 1
print '%s pick a bean. He picked %d beans, and we all picked %d beans.' % (self.name, self.count_beans, Person.count_beans)
alex = Person('Alex')
alex.pick()
mike = Person('Mike')
mike.pick()
alex.pick()
jack = Person('Jack')
jack.pick()
alex.pick()
mike.pick()
运行结果:
Alex pick a bean. He picked 1 beans, and we all picked 1 beans.
Mike pick a bean. He picked 1 beans, and we all picked 2 beans.
Alex pick a bean. He picked 2 beans, and we all picked 3 beans.
Jack pick a bean. He picked 1 beans, and we all picked 4 beans.
Alex pick a bean. He picked 3 beans, and we all picked 5 beans.
Mike pick a bean. He picked 2 beans, and we all picked 6 beans.
类似于java和c++中的static变量与一般变量的区别。类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。
类变量和实例变量在操作上的区别
1.
访问权限
类变量通过类名点操作访问也可以通过实例点操作访问className.varobjectName.var
实例变量只可以通过实例名点操作访问objectName.var
2.
类变量修改后的表现
通过className.var修改类变量,该类和所有实例所共享的数据将被修改,再次通过类或实例访问得到的将是新的数据。
通过objectName.var修改类变量,其效果将仅仅作用在该实例上,再次通过类或其它实例访问得到的仍然是旧的数据。但这一修改方式将对该类变量实例化,其结果是该实例将得到一个单独的该变量拷贝,此后此对象不再与类共享该名称的变量(实例化一说,是个人对这一现象的定义,还未找到权威描述)
在类设计中,经常遇到两种类型的变量:类变量和实例变量。
简单的说,类变量(class variable)被该类的所有实例可以共享的变量;如果某个实例修改了该变量,这种变化可以被其他实例看到。
实例变量(object variable, instance variable)属于实例私有;对实例变量的操作不会影响到其他实例对象。
举个简单的例子,就很清楚了。
#!/usr/bin/env python
class Person(object) :
count_beans = 0
def __init__(self, name) :
self.name = name
self.count_beans = 0
def pick(self) :
self.count_beans += 1
Person.count_beans += 1 #self.__class__.count_beans += 1
print '%s pick a bean. He picked %d beans, and we all picked %d beans.' % (self.name, self.count_beans, Person.count_beans)
alex = Person('Alex')
alex.pick()
mike = Person('Mike')
mike.pick()
alex.pick()
jack = Person('Jack')
jack.pick()
alex.pick()
mike.pick()
运行结果:
Alex pick a bean. He picked 1 beans, and we all picked 1 beans.
Mike pick a bean. He picked 1 beans, and we all picked 2 beans.
Alex pick a bean. He picked 2 beans, and we all picked 3 beans.
Jack pick a bean. He picked 1 beans, and we all picked 4 beans.
Alex pick a bean. He picked 3 beans, and we all picked 5 beans.
Mike pick a bean. He picked 2 beans, and we all picked 6 beans.
相关文章推荐
- python 类变量
- Python的那点事(1)——类变量的使用
- python的私有变量 是类变量吗?
- python中的实例方法、静态方法、类方法、类变量和实例变量
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- 【python】类变量和对象变量
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- Python 类变量和成员变量
- python中用函数初始化类变量
- python 类变量
- Python 私有变量、私有方法、类变量与实例变量
- Python中的实例变量和类变量
- python中的实例方法、静态变量,静态方法、类方法、类变量和实例变量
- Python类的类变量时,遇到下面的错误.
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
- Python双下划线引发的学习-类变量、实例变量
- Python的类方法,静态方法,实例方法,类变量,实例变量,静态变量的总结
- python 中的静态方法、类方法、类变量和实例变量