首頁  >  文章  >  後端開發  >  python物件導向

python物件導向

高洛峰
高洛峰原創
2016-12-01 13:36:211089瀏覽

類別中成員

 1.字段

    1.靜態字段 透過類別本身存取靜態字段在類別代碼載入時候就已經創建,無需等到new 類別名稱()

  字段  2.普通字段訪問對象。 .方法

    所有的方法屬於類別

    1.普通方法 只能先建立類別的物件,然後透過物件呼叫

     def show(self):  .name)

    2.靜態方法靜態方法的呼叫不依賴任何物件,透過類別名稱.方法名稱()呼叫,節省記憶體.

     靜態方法就是python的函數,參數不需要加上self.任意參數

     @staticmethod

     def f1():

       pass

  def f1(cls):  cls是自動傳遞此方法所在的類別名稱

       pass

    3.屬性

      包含類別中的欄位與方法兩種形式

     @property 聲明      def all_page(self):                   def all_page(self):

     100

      @all_page.setter         all_page必須是裝飾者@property下列定義的函數

   

      obj.all_page = 100      //自動呼叫setter裝飾器下面的方法


      @all_page.deleter

      def all_page(self):

 deleter裝飾器下面的方法

      obj.all_page          屬性呼叫   像字段同樣去呼叫直接取得函數的回傳值

      obj.all_page()         方法呼叫   物件呼叫方法的時候後面必須加上()

 

    foo = property(func1,func2,func3)

    func1,func2,fun3都是在類別中定義的方法

    類別名稱.foo 程式執行func1方法並取得名稱值的名詞newvalue" 執行func2方法 


 成員修飾符

  預設字段和方法name為公有的如果在字段和方法前面加上__那麼__name這個字段就變成私有成員了

私有成員本身可以存取,子類別都不可以存取父類別的私有成員

 類別的特殊成員

  obj=Foo()      呼叫Foo類別中的__init__內建方法)  Foo()()  呼叫Foo類別中的__call__內建方法 此種語法只在python中存在

 __str__函數:

  obj = Pager()  print(objmain)  _____

  obj = Pager()  print(obj.__dict__) #{'name':'333'} 輸出的值是dict型別資料

 在Pager類別定義一個def __str__(self): return "{name:obj .name}"

 print(obj)    #{name:333}  輸出的是物件的字串資訊而非物件的記憶體位址

 __dict__函數:

  (obj是物件)obj.__dict 函數:
我的所有資料轉成dict

  (Pager是類別)Pager.__dict__   把任意類別包含的成員資訊轉成dict

 __getitem__(self,item) __setitem(self,key,value) __delitkeyem(

  obj = Foo()   

  obj['aa']          #自動呼叫Foo類別中的__getitem__

#  obj['c] 中的__getitem__com

  del obj['aa ']        #自動呼叫Foo類別中的__delitem__

 __iter__函數 

  一個物件預設是不可以被迭代的,如果物件所在的類別定義了__iter__ 便可迭代

isinstance  ret=isinstance(obj,Foo) 查看物件obj是否是Foo類別或Foo的父類別的物件

issubclass  ret=issubclass(Foo,Bar)

擴充)

 1.用裝飾器可以達到在別人原先寫的函數執行流程中加上自己的代碼,但是需要在源代碼文件的函數

  上添加一個裝飾器語法糖.

 2.利用super和反射機制可以在完全不修改原來程式碼的情況下,添加一個子類別來繼承別人原來寫的類別,在

  子類別自訂方法中添加super(cls).func來在現有的程式碼中添加原來的函數.實作程式碼功能擴充.

  model = __import__(Path,fromlist=True) Path是讀取的設定項字串

  cls = getattr(model,ClassName)  ClassName是讀取的設定項的字串

ob = cls()

  obj.f1()             

 透過字串的方式動態地呼叫python類別的特定函數.


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn