13.6.5 实例属性 VS 类属性:

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 通过实例来访问

原文地址:https://www.cnblogs.com/hzcya1995/p/13349215.html