<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    5.8. 類屬性介紹

                    你已經知道了數據屬性,它們是被一個特定的類實例所擁有的變量。Python 也支持類屬性,它們是由類本身所擁有的。

                    例 5.17. 類屬性介紹

                    
                    class MP3FileInfo(FileInfo):
                        "store ID3v1.0 MP3 tags"
                        tagDataMap = {"title"   : (  3,  33, stripnulls),
                                      "artist"  : ( 33,  63, stripnulls),
                                      "album"   : ( 63,  93, stripnulls),
                                      "year"    : ( 93,  97, stripnulls),
                                      "comment" : ( 97, 126, stripnulls),
                                      "genre"   : (127, 128, ord)}
                    >>> import fileinfo
                    >>> fileinfo.MP3FileInfo            1
                    <class fileinfo.MP3FileInfo at 01257FDC>
                    >>> fileinfo.MP3FileInfo.tagDataMap 2
                    {'title': (3, 33, <function stripnulls at 0260C8D4>), 
                    'genre': (127, 128, <built-in function ord>), 
                    'artist': (33, 63, <function stripnulls at 0260C8D4>), 
                    'year': (93, 97, <function stripnulls at 0260C8D4>), 
                    'comment': (97, 126, <function stripnulls at 0260C8D4>), 
                    'album': (63, 93, <function stripnulls at 0260C8D4>)}
                    >>> m = fileinfo.MP3FileInfo()      3
                    >>> m.tagDataMap
                    {'title': (3, 33, <function stripnulls at 0260C8D4>), 
                    'genre': (127, 128, <built-in function ord>), 
                    'artist': (33, 63, <function stripnulls at 0260C8D4>), 
                    'year': (93, 97, <function stripnulls at 0260C8D4>), 
                    'comment': (97, 126, <function stripnulls at 0260C8D4>), 
                    'album': (63, 93, <function stripnulls at 0260C8D4>)}
                    1 MP3FileInfo 是類本身,不是任何類的特別實例。
                    2 tagDataMap 是一個類屬性:字面的意思,一個類的屬性。它在創建任何類實例之前就有效了。
                    3 類屬性既可以通過直接對類的引用,也可以通過對類的任意實例的引用來使用。
                    注意
                    Java 中,靜態變量 (在 Python 中叫類屬性) 和實例變量 (在 Python 中叫數據屬性) 兩者都是緊跟在類定義之后定義的 (一個有 static 關鍵字,一個沒有)。在 Python 中,只有類屬性可以定義在這里,數據屬性定義在 __init__ 方法中。

                    類屬性可以作為類級別的常量來使用 (這就是為什么我們在 MP3FileInfo 中使用它們),但是它們不是真正的常量。你也可以修改它們。

                    注意
                    Python 中沒有常量。如果你試圖努力的話什么都可以改變。這一點滿足 Python 的核心原則之一:壞的行為應該被克服而不是被取締。如果你真正想改變 None 的值,也可以做到,但當無法調試的時候別來找我。

                    例 5.18. 修改類屬性

                    >>> class counter:
                    ...     count = 0                     1
                    ...     def __init__(self):
                    ...         self.__class__.count += 1 2
                    ...     
                    >>> counter
                    <class __main__.counter at 010EAECC>
                    >>> counter.count                     3
                    0
                    >>> c = counter()
                    >>> c.count                           4
                    1
                    >>> counter.count
                    1
                    >>> d = counter()                     5
                    >>> d.count
                    2
                    >>> c.count
                    2
                    >>> counter.count
                    2
                    1 countcounter 類的一個類屬性。
                    2 __class__ 是每個類實例的一個內置屬性 (也是每個類的)。它是一個類的引用,而 self 是一個類 (在本例中,是 counter 類) 的實例。
                    3 因為 count 是一個類屬性,它可以在我們創建任何類實例之前,通過直接對類引用而得到。
                    4 創建一個類實例會調用 __init__ 方法,它會給類屬性 count1。這樣會影響到類自身,不只是新創建的實例。
                    5 創建第二個實例將再次增加類屬性 count。注意類屬性是如何被類和所有類實例所共享的。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频