1. 程式人生 > >Python3 類

Python3 類

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語句。