上一節介紹了類、對象、類屬性、實例屬性的概念以及類屬性,實例屬性,實例方法的調用
這一節,我們學習類方法、靜態方法、類繼承、重寫以及實際中的應用
上節課,我們定義了一個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__函數也重寫了