python的类属性和实例属性

本文探讨了在不同编程语言环境下类属性的作用域和生命周期,通过对比实例展示了编译型语言与解释型语言在类属性创建方式上的区别,并以Python为例,解释了如何确保类实例间的属性独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在处理项目的代码的时候,发现如下代码在多次调用的时候会出现问题。
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字段来区分出来是否是
类的属性,而解释型的语言的话,因为没有这么多修饰的关键词,所以所有的实例属性都是在使用的时候自动创建的,在类初始化的时候创建的所有属性都是
静态的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值