字段 | 方法 | 屬性 | 類的成員 | Python
阿新 • • 發佈:2017-11-15
exception 行修改 靜態 st3 per setter pri static 間接
# ----------------------------------------- 字段 class Class: # 靜態字段,屬於類 # 已經創建,並且存放在類裏,而不是每創建一個對象創建一次; country = ‘中國‘ def __init__(self, name): # 普通字段-->> 保存在創建的對象裏 self.name = name # 普通方法-->> 保存在類裏 def show(self): print(self.name) # 實例化對象obj = Class(‘Mic‘) print(obj.name) obj.show() # 通過類對象獲取靜態字段 print(Class.country) # print(Class.name) # 普通字段存放在對象中,無法通過類訪問; # 對象可以通過類對象指針(引用)訪問到靜態屬性 print(obj.country)
# ------------------------------ 方法 class MethodTest(): # 普通方法 def test1(self): # self指創建的對象 print(‘run-------1‘) # 靜態方法 @staticmethod def test2(): # 這個時候self就不是必須的,當然你要是寫了,就需要傳入一個參數 print(‘run-------2‘) # 類方法 @classmethod def test3(cls): # 這裏傳入的cls參數是python自動傳入的類名 print(cls) print(‘run-------3‘) # ----------------- 調用普通方法 # 1.創建一個對象,通過對象間接訪問類中的普通方法 obj = MethodTest() obj.test1()# 2.通過來直接訪問普通方法,但是前提是先創建一個對象 # 因為普通方法第一個參數self就代指創建的對象 MethodTest.test1(obj) # ------------------ 調用靜態方法 # 類直接調用,類似於寫了一個函數,畢竟創建一個對象會占用內容 MethodTest.test2() # ---------------- 調用類方法 MethodTest.test3() # 分別什麽時候使用? # 1.我們需要用到對象中的值,就使用普通方法; # 2.如果不需要任何對象中的值,就使用靜態方法; # 3.其實,如果需要在靜態方法中用到類名,作為參數傳入就相當於類方法; # 就是說,類方法完全可以通過靜態方法構造出來 # 而且很少需要在方法中用到類名,所以沒必要使用類方法
# ------------------------------屬性 class Attr(): @property def test4(self): print(‘run-------4‘) return ‘run4‘ @test4.setter def test4(self, param): print(param) @test4.deleter def test4(self): print(‘delete------4‘) obj = Attr() # obj.test4() # 報錯 obj.test4 print(obj.test4) # 賦值 obj.test4 = ‘change_val‘ # print(obj.test4) # 報錯 # 如果一定要賦值呢? print(obj.test4) # 刪除 del obj.test4 # >>> 其實並沒有對這個字段進行修改, # 只是通過這樣的操作,執行對應裝飾器下的方法; # 就是一個對應關系;
# ----------------- 用property裝飾器,完成分頁效果 class Paginator(object): def __init__(self, current_page): try: p = int(current_page) except Exception as e: p =1 self.page = p @property def start(self): val = (self.page-1) * 10 return val @property def end(self): val = self.page*10 return val a = list() for i in range(1000): a.append(i) while True: p = input(‘請輸入查看的頁面:‘) obj = Paginator(p) print(a[obj.start:obj.end])
# --------------------------- 用property()完成上面的效果 class ClassFunc(): def test1(self): return ‘Mic‘ def test2(self, param): print(param) def test3(self): print(‘del‘) per = property(fget=test1, fset=test2, fdel=test3) obj = ClassFunc() # 1.調用方法 # ret = obj.per # print(ret) # 2.賦值 # obj.per = ‘Mic‘ # 3.刪除 del obj.per
字段 | 方法 | 屬性 | 類的成員 | Python