使用對象組織數據
1.在程序中設計表格,我們稱之為:設計類(class)
class Student:
name = None # 記錄學生姓名
2.在程序中打印表格,我們稱之為:創建對象
# 基于類創建對象
stu_1 = Student()
stu_2 = Student()
3.在程序中填寫表格,我們稱之為:對象屬性賦值
stu_1.name = "小蘭花" # 為學生1對象賦予名稱屬性值
stu_2.name = "長珩" # 為學生2對象賦予名稱屬性值
- 類的屬性,稱之為:成員變量
- 類的行為,稱之為:成員方法
成員方法的定義語法
def 方法名(self, 形參1,……,形參N):
方法體
類隻是一種程序内的“設計圖紙”,需要基于圖紙生産實體(對象),才能正常工作
這種套路,稱之為:面向對象編程。
屬性(成員變量)的賦值:
python類可以使用 __init__()方法,稱之為構造方法。
- 在創建類對象(構造類)的時候,會自動執行。
- 在創建類對象的時候,将傳入參數自動傳遞給__init__方法使用。
- 需要使用self關鍵字
練習:學生信息錄入
開學了有一批學生信息需要錄入系統,請設計一個類,記錄學生的:
姓名、年齡、地址,這3類信息
請實現:
通過for循環,配合input輸入語句,并使用構造方法,完成學生信息的鍵盤錄入
輸入完成後,使用print語句,完成信息的輸出
class Student:
# 屬性
name = None
age = None
address = None
# 構造方法
def __init__(self):
self.name = input("請輸入學生姓名:")
self.age = int(input("請輸入學生年齡:"))
self.address = input("請輸入學生地址:")
for item in range(1,11):
print(f"當前錄入第{item}位學習信息,總共需錄入10位學生信息")
stu = Student()
print(f"學生{item}信息錄入完成,信息為:[學生姓名:{stu.name},年齡:{stu.age},地址:{stu.address}]")
運行:
魔術方法
__str__ 字符串方法
控制類轉換為字符串的行為。
__lt__ 小于符号比較方法
同時完成:小于符号和大于符号2種比較。
__le__ 小于等于符号比較方法
同時完成:小于等于符号和大于等于符号2種比較。
__eq__ 比較運算符實現方法
用于兩個類對象進行相等比較。
面向對象包含3大主要特性:
- 封裝
- 繼承
- 多态
封裝練習:設計帶有私有成員的手機
設計一個手機類,内部包含:
私有成員變量:__is_5g_enable,類型bool,True表示開啟5g,False表示關閉5g
私有成員方法:__check_5g(),會判斷私有成員__is_5g_enable的值
若為True,打印輸出:5g開啟
若為False,打印輸出:5g關閉,使用4g網絡
公開成員方法:call_by_5g(),調用它會執行
調用私有成員方法:__check_5g(),判斷5g網絡狀态
打印輸出:正在通話中
運行結果:5g關閉,使用4g網絡
正在通話中
class Phone():
# 提供私有成員變量
__is_5g_enable = True
# 提供私有成員方法
def __check_5g(self):
if self.__is_5g_enable:
print("5g開啟")
else:
print("5g關閉,使用4g網絡")
# 提供公開成員方法
def call_by_5g(self):
self.__check_5g()
print("正在通話中")
phone = Phone()
phone.call_by_5g()
運行:
單繼承 class 類名(父類名)
多繼承 class 類名(父類1,父類2,……,父類N)
pass 表示空,用來保證類定義的完整性
調用父類同名成員
方式1:調用父類成員
使用成員變量:父類名.成員變量
使用成員方法:父類名.成員方法(self)
方式2:使用super()調用父類成員
使用成員變量:super().成員變量
使用成員方法:super().成員方法()
變量類型注解
1.變量:類型
2.注釋中寫 # type:類型
函數(方法)類型注解-形參注解
def 函數方法名(形參名:類型,形參名:類型,……)
pass
函數(方法)類型注解-返回值注解
def 函數方法名(形參名:類型,形參名:類型,……) -> 返回值類型:
pass
聯合類型注解
from typing import Union
Union[類型,……,類型]
多态:
同樣的行為(函數),傳入不同的對象,得到不同的狀态
多态常作用在繼承關系上
函數(方法)形參聲明接收父類對象
實際傳入父類的子類對象進行工作
抽象類:含有抽象方法的類稱之為抽象類
抽象方法:方法體是空實現的(pass)稱之為抽象方法
,