您的位置:首页 > 编程语言 > Python开发

python的类属性和实例属性

2013-01-04 21:18 483 查看
在处理项目的代码的时候,发现如下代码在多次调用的时候会出现问题。

class test1(object):

_dataArr=[]

def __init__(self,i):

self._dataArr.append(i)

def run(self):

print self._dataArr

t1=test1(1)

t2=test1(2)

t1.run()

t2.run()

输出的结果照常理的话,应该是

[1]

[2]

结果却是:

[1, 2]

[1, 2]

说明构造test类两次,两次用的_dataArr是同一个,所以_dataArr应该是一个类级别的属性,这样才能让两个实例进行调用,而且用的又是同一个内容。

如果将_dataArr变量变成动态的。

class test2(object):

def __init__(self,i):

self._dataArr=[]

self._dataArr.append(i)

def run(self):

print self._dataArr

def case2():

t1=test2(1)

t2=test2(2)

t1.run()

t2.run()

case2()

那么输出的结果就是正确的。

[1]

[2]

为此合理的解释,就是编译型的语言和解释型的语言有很大的不一样,尤其在处理类这个东西的时侯,编译型的语句可以通过static字段来区分出来是否是

类的属性,而解释型的语言的话,因为没有这么多修饰的关键词,所以所有的实例属性都是在使用的时候自动创建的,在类初始化的时候创建的所有属性都是

静态的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: