類別中成員
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裝飾器下面的方法 obj.all_page 屬性呼叫 像字段同樣去呼叫直接取得函數的回傳值
foo = property(func1,func2,func3) func1,func2,fun3都是在類別中定義的方法 類別名稱.foo 程式執行func1方法並取得名稱值的名詞newvalue" 執行func2方法
類別的特殊成員
obj=Foo() 呼叫Foo類別中的__init__內建方法) Foo()() 呼叫Foo類別中的__call__內建方法 此種語法只在python中存在
__str__函數:
obj = Pager() print(objmain) _____
(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__comdel 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類別的特定函數.