Python 中的类变量和实例变量(关键词:Python/类变量/实例变量)

类变量: class 语句的顶层进行赋值的变量,会被附加在类中,被所有实例所共享;
实例变量:附加在实例上的变量,不被共享,可通过这 2 种方式创建或修改:

  1. aInstance.name = sth 的形式;
  2. 类的实例方法中,self.name = sth 的形式。
>>> class C:
	a = 0
	def __init__(self, name):
		self.name = name

		
>>> c1 = C('heli')
>>> c2 = C('henry')
>>> c1.name, c2.name
('heli', 'henry')
>>> C.a, c1.a, c2.a
(0, 0, 0)
>>> C.a = 2
>>> C.a, c1.a, c2.a
(2, 2, 2)
>>> c1.a = 5
>>> C.a, c1.a, c2.a
(2, 5, 2)
>>> c1.tech = 'sss'
>>> c2.tech

Traceback (most recent call last):
  File "<pyshell#204>", line 1, in <module>
    c2.tech
AttributeError: C instance has no attribute 'tech'

c1.tech = 'sss'的解释:对实例属性进行赋值运算,会在该实例内创建或修改变量名,而不是在共享的类中。对 c1.tech 进行赋值,会把该变量名附加在 c1 本身上。

类属性可以管理贯穿所有实例的信息。例如,所产生的实例的数目的计数器。

>>> class C:
	instanceCount = 0
	def __init__(self):
		C.instanceCount += 1

>>> c1 = C()
>>> C.instanceCount, c1.instanceCount
(1, 1)
>>> c2 = C()
>>> C.instanceCount, c1.instanceCount, c2.instanceCount
(2, 2, 2)

参考文献:

  1. 《Python学习手册(第 4 版)》 - 第28章 - class 语句 - P686——P689;
  2. https://github.com/taizilongxu/interview_python#4-类变量和实例变量
  3. http://stackoverflow.com/questions/6470428/catch-multiple-exceptions-in-one-line-except-block。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值