標籤:res int cli 基本 方式 深圳 __init__ .com ram
類的成員
類的成員可以分成三大類:欄位丶方法和屬性
注:所有成員中,只有普通欄位的內容儲存對象中,即:根據此類建立了多少對象,在記憶體中就有多少個普通欄位。而其他的成員,則都是儲存在類中,即:無論對象的多少,在記憶體中只建立一份。
一丶欄位
欄位包括:普通欄位和靜態欄位,他們在定義和使用中有區別,而最本質的區別是記憶體中儲存的位置不同
·普通欄位屬於對象
·靜態欄位屬於類
class Province: # 靜態欄位 country = ‘中國‘ def __init__(self, name): # 普通欄位 self.name = name# 直接存取普通欄位obj = Province(‘河北省‘)print obj.name# 直接存取靜態欄位Province.country
欄位的定義和使用
由可知:
靜態欄位在記憶體中只儲存一份
普通欄位在每個對象中都要儲存一份
應用情境:
通過類建立對象時,如果每個對象都具有相同的欄位,那麼就使用靜態欄位
二丶方法
方法包括,普通方法,靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於調用的方式不同
·普通方法:由對象調用,至少一個self參數,執行普通方法時,將自動調用該方法的對象賦值給self
·類方法:由類調用,至少一個cls參數,執行類方法時,自動調用該方法的類賦值給cls
·靜態方法:由類調用,無預設參數
1 class Foo: 2 3 def __init__(self, name): 4 self.name = name 5 6 def ord_func(self): 7 """ 定義普通方法,至少有一個self參數 """ 8 9 # print self.name10 print ‘普通方法‘11 12 @classmethod13 def class_func(cls):14 """ 定義類方法,至少有一個cls參數 """15 16 print ‘類方法‘17 18 @staticmethod19 def static_func():20 """ 定義靜態方法 ,無預設參數"""21 22 print ‘靜態方法‘23 24 25 # 調用普通方法26 f = Foo()27 f.ord_func()28 29 # 調用類方法30 Foo.class_func()31 32 # 調用靜態方法33 Foo.static_func()
方法的定義和使用
相同點:對於所有方法而言,均屬於類(非對象)中,所以,在記憶體中也只儲存一份
不同點:方法調用者不同,調用方法時自動傳入的參數不同
三丶屬性
1.屬性的基本使用
# ############### 定義 ###############class Foo: def func(self): pass # 定義屬性 @property def prop(self): pass# ############### 調用 ###############foo_obj = Foo()foo_obj.func()foo_obj.prop #調用屬性
屬性的定義和使用
由屬性的定義和調用要注意以下幾點:
定義時:在普通方法的基礎上添加@proprety
定義時:屬性僅有一個self參數
調用時:無需括弧
方法:foo_obj.func()
屬性:foo_obj_prop
注意:屬性存在的意義是,訪問屬性時可以製造出和訪問欄位完全相同的假象
屬性由方法變種而來,如果python中沒有屬性,完全可以代替其功能
執行個體:對於主機列表頁面,每次請求不可能把資料庫中的所有內容都顯示到頁面上,而是通過分頁的功能局部顯示,所以在向資料庫中請求資料時就要顯示的指定擷取從第m條到第n條的所有資料(即:limit m,n),這個分頁的功能包括:
- 根據使用者請求的當前頁和總資料條數計算出 m 和 n
- 根據m 和 n 去資料庫中請求資料
class Pagenation(object): """ 處理分頁相關的代碼 """ def __init__(self,page,per_page_num=10): """ 初始化 :param page: 當前要查看的頁面 :param per_page_num: 每頁預設要顯示的資料行數 """ self.page = page self.per_page_num = per_page_num @property def start(self): """ 計算索引的起始位置 :return: """ return (self.page-1) * self.per_page_num @property def end(self): """ 計算索引的結束位置 :return: """ return self.page * self.per_page_numdata_list = []for i in range(1, 901): data_list.append(‘alex-%s‘ % i)while True: # 1. 要查看的頁面 page = int(input(‘請輸入要查看的頁碼:‘)) obj = Pagenation(page) page_data_list = data_list[obj.start:obj.end] for item in page_data_list: print(item)
執行個體
python的屬性功能是:屬性內部進行一系列的邏輯運算,最終將計算結果返回
四丶嵌套
1 # by luffycity.com 2 """ 3 建立三個學校且三個學校的設施內容等都是一致. 4 """ 5 6 class School(object): 7 def __init__(self, name, address): 8 self.name = name 9 self.address = address10 11 def speech(self):12 print(‘講課‘)13 14 obj1 = School(‘北京校區‘, ‘美麗富饒的沙河‘)15 obj2 = School(‘上海校區‘, ‘浦東新區‘)16 obj3 = School(‘深圳校區‘, ‘南山區‘)17 class Teacher(object):18 def __init__(self, name, age, salary):19 self.name = name20 self.age = age21 self.__salary = salary22 self.school = None23 24 t1 = Teacher(‘李傑‘, 19, 188888)25 t2 = Teacher(‘豔濤‘, 18, 60)26 t3 = Teacher(‘女神‘,16, 900000)27 # ############## 老師分配校區28 t1.school = obj129 t2.school = obj130 t3.school = obj231 # ####################################32 # 查看t1老師,所在的校區名稱/地址33 print(t1.school.name)34 print(t1.school.address)35 print(t1.name)36 print(t1.age)37 t1.school.speech()
嵌套執行個體
·
(python)物件導向進階