python class 的屬性

來源:互聯網
上載者:User
Class 有一些特殊的屬性,便於我們獲得一些額外的資訊。
>>> class Class1(object):    """Class1 Doc."""    def __init__(self):        self.i = 1234>>> Class1.__doc__ # 類型協助資訊'Class1 Doc.'>>> Class1.__name__ # 類型名稱'Class1'>>> Class1.__module__ # 類型所在模組'__main__'>>> Class1.__bases__ # 類型所繼承的基類(<type 'object'>,)>>> Class1.__dict__ # 類型字典,儲存所有類型成員資訊。<dictproxy object at 0x00D3AD70>>>> Class1().__class__ # 類型<class '__main__.Class1'>>>> Class1().__module__ # 執行個體類型所在模組'__main__'>>> Class1().__dict__ # 對象字典,儲存所有執行個體成員資訊。{'i': 1234}

成員

Python Class 同樣包含類型和執行個體兩種成員。

>>> class Class1:    i = 123 # Class Field    def __init__(self):        self.i = 12345 # Instance Field        >>> print Class1.i123>>> print Class1().i12345
兩個比較重要的取執行個體屬性的函數:

getattr(執行個體,屬性名稱),hasattr(執行個體,屬性名稱)判斷屬性名稱是否屬於執行個體。

如上例:s='i',getattr(Class1(),s)=12345

hasattr(Class1(),s)=True
-----------------------

有幾個很 "特殊" 的 "規則" 需要注意。

(1) 我們可以通過執行個體引用訪問類型成員。因此下面的例子中 self.i 實際指向 Class1.i,直到我們為執行個體新增了一個成員 i。

>>> class Class1:    i = 123    def __init__(self):        print self.i         print hex(id(self.i))>>> hex(id(Class1.i)) # 顯示 Class1.i'0xab57a0'>>> a = Class1() # 建立 Class1 執行個體,我們會發現 self.i 實際指向 Class1.i。1230xab57a0>>> Class1.__dict__ # 顯示 Class1 成員{'i': 123, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00D39470>}>>> a.__dict__ # 顯示執行個體成員{}>>> a.i = 123456789 # 為執行個體新增一個成員 i>>> hex(id(a.i)) # 顯示新增執行個體成員地址'0xbbb674'>>> a.__dict__ # 顯示執行個體成員{'i': 123456789}

我們可以在成員名稱前添加 "__" 使其成為私人成員。

>>> class Class1:    __i = 123    def __init__(self):        self.__x = 0    def __test(self):        print id(self)
事實上這隻是一種規則,並不是編譯器上的限制。我們依然可以用特殊的文法來訪問私人成員。
>>> Class1._Class1__i123>>> a = Class1()>>> a._Class1__x0>>> a._Class1__test()13860376
-----------------------

除了靜態(類型)欄位,我們還可以定義靜態方法。
>>> class Class1:    @staticmethod    def test():        print "static method">>> Class1.test()static method

重載
Python 支援一些特殊方法和運算子多載。

>>> class Class1:    def __init__(self):        self.i = 0    def __str__(self):        return "id=%i" % id(self)    def __add__(self, other):        return self.i + other.i>>> a = Class1()>>> a.i = 10>>> str(a)'id=13876120'>>> b = Class1()>>> b.i = 20>>> a + b30
通過重載 "__eq__",我們可以改變 "==" 運算子的行為。
>>> class Class1:    pass>>> a = Class1()>>> b = Class1()>>> a == bFalse>>> class Class1:    def __eq__(self, x):        return 55>>> a = Class1()>>> b = Class1()>>> a == b55
 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.