python 类属性 用处_python 的 类属性 与 实例属性

python中类属性与其被定义的类绑定,和任何实例都无关。

对于类属性的访问,可以通过 类名+“.” + 属性名的方式来访问(如以下示例的Person.age);也可以通过类的实例+“.” + 属性名的方式(如以下示例最初使用的p.age),但此时需要有一定要求,那就是,该实例没有与类变量同名的变量,因为如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。

而对类属性的值的修改,只能通过类名的访问加以实现。(此处存在一点例外,最后会加以说明)

以下通过一段实例代码加以说明:

>>> class Person():

age =10

>>> p = Person()

>>> print Person.age , p.age

10 10

>>> Person.age +=1

>>> print Person.age , p.age

11 11

>>> p.age += 1

>>> print Person.age , p.age

11 12

在以上的操作中,定义了Person类和age的类属性,对于实例p,当它不存在同名的实例变量age的时候,Person.age和p.age均可访问类变量;

然而,当p.age += 1 之后,就意味着p这个实例具有了一个属性age,恰恰与Person类的属性age同名。这样,p.age则访问的是p的实例属性,而非Person类的属性。

进一步的,我们可以通过调用.__dict__,看一看。

>>> print Person.__dict__ ,p.__dict__

{'__module__': '__main__', 'age': 11, '__doc__': None} {'age': 12}

那么实例对象的影响会持续到什么时候?事实上,只要实例对象被del掉,还是可以通过p.age来访问类变量的。

>>> del p.age

>>> print Person.age , p.age

11 11

>>> print Person.__dict__ ,p.__dict__

{'__module__': '__main__', 'age': 11, '__doc__': None} {}

以上说到:而对类属性的值的修改,只能通过类名的访问加以实现,此处存在特殊情况。而特殊情况就是:当类属性是一个可变对象(如字典,序列)时,就可以通过实例来对其加以修改。

>>> class Person():

age = {'zhousui':10}

num = [1,2,3,4]

>>> p = Person()

>>> print Person.age['zhousui'] , p.age['zhousui']

10 10

>>> print Person.num[0] , p.num[0]

1 1

>>> Person.num[0] = 10

>>> print Person.num[0] , p.num[0]

10 10

>>> p.num[0] = 20

>>> print Person.num[0] , p.num[0]

20 20

>>> print Person.num

[20, 2, 3, 4]

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值