Python中类变量和类的属性

来源:互联网 发布:冰川网络vr游戏上线没 编辑:程序博客网 时间:2024/05/17 09:25
概要:
最近在用Python写一个博客系统的后台,其中遇到了这样一个错误:有一个获取所有文章的接口,每次调用这个接口返回的文章数就会加一倍。后来发现是在一个类中用了一个类变量存储文章列表所致,改成用类属性来存储后问题解决。此问题出现的原因在于误将实际上由类的各个实例共享的变量当成了各个类独有的,也就是说Python中类的变量和C++中类的静态成员类似

类变量和类的属性:
如下代码所示:

class Test:     x = 1     def __init__(self):          self.y = 2



x即为类Test的变量,各个Test的实例中的x都是一样的,而y为Test的属性,每个Test实例的y都是独立的。

关于类变量的补充说明:
a = Test()
b = Test()
你只能通过Test.x的方式来改变类变量的值,
如果你尝试使用a.x = 2的方式来改变x的值,你将会发现无论是b.x还是Test.x的值都是1,说明
a.x = 2并没有改变类变量x的值,而只是为a增加了一个名称为x的属性,由于属性和类变量的
名称一样,属性会覆盖掉类变量的值,所以你会看到:
a.x为2
b.x 为1
Test.x 为1

当然,如果类变量是引用类型的话,例如:
class Test:     x = list()a = Test()b = Test()

你也可以用a.x.append(1)来改变类变量的内容,需要注意的是如果你要替换整个list(),你只能用Test.x = [1,2,3]这种方法,a.x = [1,2,3],和上面的例子一样,只会为a增加一个名称为x的属性
 
--------------------------------------------------
author: cs_cjl
website: http://blog.csdn.net/cs_cjl
--------------------------------------------------
原创粉丝点击