Python3 類
Python3 類
目錄
在Python中,首字母大寫的名稱值得是類,而小寫的名稱指的是根據類建立的例項。
Python類中的每個屬性都必須有初始值。可以在__init__()方法內為某個屬性設定預設初始值,此時無需包含為它提供初始值的形參。
類中的函式稱為方法,Python類中的方法都必須有一個引數,該引數是例項化物件的自身引用,該引數通常命名為self,且該引數必須放在引數列表中的第一個位置。
__init__():類的構造方法,在建立類的例項化物件時,Python會自動呼叫該方法。Python在呼叫時,首先會去類的定義中看有沒有重新定義的__init__()方法,如果有就用新定義;否則呼叫預設的__init__()方法。
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # 此類沒有重寫__inti()__構造方法 class Restaurant: """一個簡單的餐館類""" def description_restaurant(self): """對餐館簡單描述""" print("美味的四川火鍋") # 此類重寫__inti()__構造方法 class Newrestaurant: def __init__(self, restaurant_name, cuisine_type): """重寫構造方法:對屬性賦值""" self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type self.number_served = 0 # 設定預設初始值 def description_newrestaurant(self): """列印餐館的描述資訊""" print("歡迎來到"+self.restaurant_name) print("我們是一家"+self.cuisine_type) def set_number_served(self, number): """設定就餐人數""" self.number_served = number def increment__number_served(self, increment): """增加就餐人數""" self.number_served = self.number_served + increment def print_numbers(self): """列印餐館目前就餐人數""" print("現在共有"+str(self.number_served)+"人就餐,請耐心排隊等候") my_restaurant = Restaurant() # 例項化一個物件 my_restaurant.description_restaurant() new_restaurant = Newrestaurant("我愛南洋菜", "東南亞菜系") new_restaurant.description_newrestaurant() new_restaurant.print_numbers() # 列印預設初始值就餐人數 new_restaurant.number_served = 120 # 直接修改屬性的值 new_restaurant.print_numbers() # 列印修改後的就餐人數 new_restaurant.set_number_served(46) # 通過方法修改屬性的值 new_restaurant.print_numbers() # 列印修改後的就餐人數 new_restaurant.increment__number_served(4) # 通過方法遞增修改屬性的值 new_restaurant.print_numbers() # 列印修改後的就餐人數
繼承
當一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法:原有的類稱為父類,而新類稱為子類。子類繼承了父類的所有屬性和方法,同時還可以定義自己的屬性和方法。
建立子類時,父類必須包含在當前文件中,且必須位於子類前面。必須在括號中指定繼承的父類名稱
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # 父類 class Restaurant: """一家簡單的餐館""" def __init__(self, restaurant_name, cuisine_type): """重寫構造方法:對屬性賦值""" self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type def description_restaurant(self): """列印餐館的描述資訊""" print("歡迎來到"+self.restaurant_name) print("我們是一家"+self.cuisine_type+"店") # 子類IceCreamStand繼承Restaurant類 class IceCreamStand(Restaurant): """一家冰激凌小店""" pass # 子類只繼承父類的所有屬性和方法,沒有重寫父類的方法或定義自己的屬性和方法 # 子類NewIceCreamStand繼承Restaurant類 class NewIceCreamStand(Restaurant): """一家冰激凌小店""" def __init__(self, restaurant_name, cuisine_type, flavors): # 重寫父類的構造方法,並新增子類特有屬性flavors """ 先使用super()函式呼叫父類的構造方法,初始化父類的屬性;再初始化子類的特有屬性 """ super().__init__(restaurant_name, cuisine_type) self.flavors = flavors def description_restaurant(self): # 重寫父類的description_restaurant方法 """列印餐館的描述資訊""" print("歡迎大家來到"+self.restaurant_name) print("我們是一家"+self.cuisine_type+"店") def description_icecream(self): # 定義子類特有的方法 """列印冰激凌的口味""" n = 1 print("本店銷售各種口味的冰激凌:") for ice in self.flavors: print(str(n)+"、"+ice+"口味") n = n + 1 my_icecreamstand = IceCreamStand("夏天的味道", "冰激凌") my_icecreamstand.description_restaurant() flavors = ["香草味", "巧克力味", "草莓味", "芒果味", "抹茶芝士味"] new_icecreamstand = NewIceCreamStand("新夏天的味道", "冰激凌", flavors) new_icecreamstand.description_restaurant() new_icecreamstand.description_icecream()
專案組織方式
一開始應讓程式碼結構儘可能簡單。先儘可能在一個檔案中完成所有工作,確定一切都能正確執行後,再將類移到獨立的模組中。如果你喜歡模組和檔案的互動方式,可在專案開始時就嘗試將類儲存到模組中。先找出能夠讓你編寫出可行程式碼的方式,再嘗試讓程式碼更為組織有序。
類編碼風格
類名應採用駝峰命名法,即將類名中的每個單詞的首字母都大寫,而不使用下劃線。
例項名和模組名都採用小寫格式,並在單詞之間加上下劃線。
對於每個類,都應緊跟在類定義之後包含一個文件字串,該文件字串應簡要描述類的功能。
每個模組也都應包含一個文件字串,對其中的類可以用於做什麼進行描述。
需要同時匯入標準庫中的模組和你自己編寫的模組時,先編寫匯入Python標準庫模組的import語句,再新增一個空行,然後編寫匯入你自己編寫的模組的import語句。