13.6.5 实例属性 VS 类属性:
我们已在13.4.1 节中描述了类数据属性,这里简要提一下,类属性仅是与类相关的数据值,和实例属性不同,
类属性和实例无关。
这些值像静态成员那样被引用,即使在多次实例化中调用类,它们的值都保持不变。
不管如何,静态成员不会因为实例而改变他们的值,除非实例显示改变他们的值
(实例属性与类属性的比较,类似于自动变量和静态变量,但这只是笼统的类推。
类和实例都是名字空间,类是类属性的名字空间,实例则是实例属性的。
关于类属性和实例属性,还有一些方面需要指出.你可采用类来访问类属性,如果实例
没有同名的属性的话,你也可以用实例来访问。
访问类属性:
类属性可通过类或实例来访问。下面的示例中,类C在创建时,带上一个version属性,这样通过
类对象来访问它是很自然的了,比如,C.version.
当实例c被创建后,对实例c而言,访问c.version会失败,不过python首先会在实例中搜索version,
然后是类,再就是继承树中的基类。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
class C(object): # define class 定义类
pass
print C
print type(C)
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a4.py
<class '__main__.C'>
<type 'type'>
# !/usr/bin/env python
# -*- coding: utf-8 -*-
class C(object): # define class 定义类
pass
print C
print type(C)
c=C()
print c
print type(c)
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a4.py
<class '__main__.C'>
<type 'type'>
<__main__.C object at 0x02567E30>
<class '__main__.C'>
# !/usr/bin/env python
# -*- coding: utf-8 -*-
class C(object): # define class 定义类
version = 1.2 # static member 静态成员
print C
print type(C)
c=C() # instantiation 实例化
print c
print type(c)
print C.version # access via class 通过类来访问
print c.version # access via instance 通过实例来访问