(python)物件導向進階

來源:互聯網
上載者:User

標籤: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)物件導向進階

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.