第一篇 第二十三節 類方法、靜態方法、繼承、重寫

上一節介紹了類、對象、類屬性、實例屬性的概念以及類屬性,實例屬性,實例方法的調用
這一節,我們學習類方法、靜態方法、類繼承、重寫以及實際中的應用
上節課,我們定義了一個People類:

# -*-coding:utf8-*-
"""
=========================================
author: Lujier            time: 2019/5/26
E-mail: [email protected]
==========================================
"""


class People:
    """
    定義一個人類People,
    有屬性:喫飯,睡覺,年齡,身高,體重,性別, 名字
    行爲:跑步
    """
    behavior_1 = "喫飯"  # 類屬性定義
    behavior_2 = '睡覺'

    def __init__(self, name, sex, age):
        """
        :param name: user's name---->str
        :param sex:  user's sex---->str
        :param age:  user's age---->int
        """
        self.name = name  # 實例屬性定義
        self.sex = sex
        self.age = age

    def run(self, minites, distance):  # 定義一個跑步的方法,實例方法
        """
        :param minites:   ran for how long time----->int
        :param distance:  ran many kilometers----->int
        """
        print(f"{self.name}在{minites}分鐘跑了{distance}公里")


我們繼續在原來的基礎上進行學習
類方法、靜態方法、繼承、方法重寫的定義:
1 類方法:
概念:使用裝飾器 @classmethod,第一個參數必須是類,該參數名約定爲cls,通過它來傳遞類的屬性的方法
調用:類和實例對象都可以調用
應用場景:需要站在類的角度進行的行爲,那麼就應該定義爲類方法

 @classmethod   # 類方法裝飾器
    def skill_introduce(cls):    # 類方法,cls代表的是類本身
        print(f"會{cls.behavior_1},並且還會{cls.behavior_2}")

調用:
在這裏插入圖片描述
2 靜態方法:
概念:使用裝飾器 @staticmethod,第一個參數隨意,可以是cls,self,但是方法體中不能使用類或實例的任何
方法和屬性
調用:類和實例對象都可以調用
應用場景:存放邏輯代碼,內部不需要引用類屬性和實例屬性

     @staticmethod  # 靜態方法裝飾器
    def static_introduce1():
        print(f"靜態方法1:喫飯睡覺,是亙古不變的技能,哈啊")

     @staticmethod   # 靜態方法裝飾器
    def static_introduce2(name): 
        print(f"靜態方法3:我的名字是:{name}") 

在這裏插入圖片描述
3 繼承:子類通過繼承父類獲取父類的所有屬性的方法,被繼承的是父類(基類),繼承者是子類
Girl類繼承People:

class Girl(People):
    def __init__(self, name, age, sex="Girl"):
        super().__init__(name, sex, age)

    def beauty_nick_name(self):  # 定義一個方法,女性的一些其他褒義稱呼
        print("小美妞,大美女,御姐")

在這裏插入圖片描述
通過截圖,我們可以知道,如果繼承父類,那麼也會自然而然的繼承父類的類屬性,實例屬性,類方法,實例方法,靜態方法等等內容

4. 重寫
依舊是3中的例子,定義一個Girl類,並繼承People類,在這裏,我們需要
1) 增加一個屬性:體重weight
2) People中run()方法重寫

class Girl(People):
    def __init__(self, name, age, weight, sex="Girl"):
        """
        __init__方法重寫,增加weight屬性
        :param name: name ----- >str
        :param age:  age-------> int
        :param weight:  weight ---->int
        :param sex:    sex---->str
        """
        super().__init__(name, sex, age)  # 繼承People的__init__函數
        self.weight = weight

    def beauty_nick_name(self):  # 定義一個方法,女性的一些其他褒義稱呼
        print("小美妞,大美女,御姐")

    def run(self, minutes, distance): # 重寫run方法
        super().run(minites, distance)
        print(f"{self.name}體重是:{self.weight}")

其實,增加了一個屬性weight,相當於__init__函數也重寫了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章