日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

PYTHON1.面向对象_day04

發(fā)布時間:2024/1/17 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PYTHON1.面向对象_day04 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

課程:Python面向?qū)ο?br /> 進度:day4

上次內(nèi)容回顧

1. 運算符重載
? 1)算術(shù)運算符重載
???? __add__(self,rhs)? obj+3
???? __sub__(self,rhs)? obj-3
???? __mul__(self,rhs)? obj*3
???? __truediv__(self,rhs) obj/3
???? __floordiv__(self,rhs) obj//3
???? __mod__(self,rhs)? obj%3
???? __pow__(self,rhs)? obj**3
????
???? 反向算術(shù)運算符: 3+obj
???? 復合算術(shù)運算符: obj += 3
?? 2)比較運算符
???? __lt__(self,rhs)?? obj < 3
???? __gt__(self,rhs)?? obj > 3
???? __eq__(self,rhs)?? obj == 3
???? __ne__(self,rhs)?? obj != 3
???? __ge__(self,rhs)?? obj >= 3
???? __le__(self,rhs)?? obj <= 3
????
?? 3)一元運算符:帶一個操作數(shù)
???? __neg__(self)?? -obj
???? __pos__(self)?? +obj
???? __invert__(self)? ~obj
????
?? 4)in,not in
???? __contains__(self,e)
????
?? 5)索引運算符重載
???? __getitem__(self,i)? x=obj[i]
???? __setitem__(self,i,val) obj[i]=x
???? __delitem__(self,i)? del obj[i]

2. 對象的內(nèi)置屬性
?? __dict__: 綁定對象的變量
?? __class__:綁定創(chuàng)建本對象的類


今天的內(nèi)容
1. 類屬性和類方法
?? 1)類屬性(類變量)
???? - 什么是類屬性:屬于類,而不是對象
???? - 可以通過類訪問,也可通過對象訪問
?????? ClassName.attribute? 通過類訪問
?????? objectName.attribute 通過對象訪問

???? - 定義:在類的所有方法之外定義
???? - 特征:類變量為所有實例所共享

? 2)類方法:屬于類而不屬于對象
???? - 定義方式:需要在方法前加@classmethod裝飾器
???? - 特征:第一個參數(shù)不是self, 而是cls
???????????? 綁定調(diào)用該方法的類而不是對象
????????????
???????????? 類方法不能訪問對象屬性
???? - 訪問:類.方法(), 或
????
?? 3)靜態(tài)方法
???? - 什么是靜態(tài)方法:主要處理一些邏輯,
?????? 跟類有一定的相關(guān)性,跟類沒有數(shù)據(jù)交互
?????? (不操作類的屬性)
???? - 如何定義靜態(tài)方法:通過@staticmethod
?????? 裝飾器進行定義,不需要傳入self和cls
???? - 調(diào)用:可以通過類或?qū)ο筮M行調(diào)用
???? - 意義:對一些獨立的功能或操作進行
???????????? 歸類存放
????????????
2. 類的預置屬性?
?? 1)__slots__屬性
???? 作用:用來限定屬性的范圍,示例化對象時,
????????? 不允許對象設(shè)置__slots__限定外的屬性
????????? 從而防止因?qū)傩蕴顚戝e誤導致的程序錯誤
???? 類型:允許的屬性名稱(字符串)構(gòu)成的列表
????????? 含有__slots__屬性的類創(chuàng)建的對象
????????? 沒有__dict__內(nèi)置屬性

? 2)__doc__屬性
???? 作用:綁定類中第一個沒有賦值的字符串,
?????????? 可以通過help函數(shù)進行查看。__doc__
?????????? 屬性主要存放類的描述信息
??? 示例:見staff.py
???? 查看:進入python交互模式,執(zhí)行
???????????? from staff import *
???????????? help(Staff)

1 # staff.py 2 # 員工類,演示__slots__屬性示例 3 class Staff: 4 "這是一個員工類" 5 __slots__ = ["no", "name", "position"] 6 7 def __init__(self, no, name, position): 8 self.no = no #員工編號 9 self.name = name #員工姓名 10 self.position = position #職位 11 #self.salary = 8000 #不允許 12 13 def __str__(self): 14 ret = "編號:%s, 姓名:%s, 職位:%s" %\ 15 (self.no, self.name, self.position) 16 return ret 17 18 def work(self): #員工工作方法 19 print("%s正在工作" % self.name) 20 21 #定義機器人類,繼承自Staff類 22 class ServiceRobot(Staff): 23 def __init__(self, no, name, position): 24 super().__init__(no, name, position) 25 26 def work(self): #重寫工作方法 27 print("%s的工作,掃地" % self.name) 28 29 if __name__ == "__main__": 30 staff = Staff("0001", "Jerry", "經(jīng)理") 31 #如果沒有__slots__屬性,則創(chuàng)建一個新屬性 32 #執(zhí)行不會報錯,但沒有起到給屬性賦值的作用 33 #staff.positino = "副總經(jīng)理" 34 print(staff) 35 36 robot = ServiceRobot("0002","多啦A夢","服務(wù)員") 37 print(robot) 38 robot.work() staff.py

3. 類的關(guān)系設(shè)計(理解)
?? 1)繼承關(guān)系
????? - 描述子類、父類之間的關(guān)系
????? - 子類和父類是"是一個XX"的關(guān)系
?????
?? 2)組合關(guān)系
????? - 一個對象中嵌入了另一個對象
??????? 描述"有一個"的關(guān)系
??????? 整體包含部分的關(guān)系
?????
?? 3)關(guān)聯(lián)關(guān)系?
????? - 一個類中嵌套了另一個類,但是這兩個
??????? 類是平等關(guān)系,而不是局部和整體的關(guān)系
????? - 關(guān)聯(lián)可以是單向,也可是雙向
?????
?? ?? 示例代碼:見chain_store.py

1 # staff.py 2 # 員工類,演示__slots__屬性示例 3 class Staff: 4 "這是一個員工類" 5 __slots__ = ["no", "name", "position"] 6 7 def __init__(self, no, name, position): 8 self.no = no #員工編號 9 self.name = name #員工姓名 10 self.position = position #職位 11 # self.salary = 8000 #不允許 12 13 def __str__(self): 14 ret = "編號:%s, 姓名:%s, 職位:%s" %\ 15 (self.no, self.name, self.position) 16 return ret 17 18 def work(self): #員工工作方法 19 print("%s正在工作" % self.name) 20 21 #定義機器人類,繼承自Staff類 22 class ServiceRobot(Staff): 23 def __init__(self, no, name, position): 24 super().__init__(no, name, position) 25 26 def work(self): #重寫工作方法 27 print("%s的工作,掃地" % self.name) 28 29 if __name__ == "__main__": 30 staff = Staff("0001", "Jerry", "經(jīng)理") 31 #如果沒有__slots__屬性,則創(chuàng)建一個新屬性 32 #執(zhí)行不會報錯,但沒有起到給屬性賦值的作用 33 # staff.positino = "副總經(jīng)理" 34 print(staff) 35 36 robot = ServiceRobot("0002","多啦A夢","服務(wù)員") 37 print(robot) 38 robot.work() staff.py 1 # customer.py 2 # 客戶類 3 class Customer: #客戶類 4 def __init__(self,cust_id,cust_name,tel_no): 5 self.cust_id = cust_id 6 self.cust_name = cust_name 7 self.tel_no = tel_no 8 9 def __str__(self): 10 ret = "客戶編號:%s,客戶名稱:%s,電話:%s" \ 11 %(self.cust_id, self.cust_name, self.tel_no) 12 return ret customer.py 1 # chain_store.py 2 # 連鎖店類,類屬性/類方法示例 3 from staff import * 4 from customer import * 5 6 class ChainStore: 7 #類屬性 8 store_num = 0 #連鎖店門店數(shù)量 9 total_income = 0 #所有門店總營業(yè)額 10 store_list = [] #所有門店對象列表 11 cust_list = [] #所有會員列表 12 13 def __init__(self,store_no,store_name, 14 address, manager): 15 print("門店開張") 16 self.store_no = store_no #編號 17 self.store_name = store_name #名稱 18 self.address = address #地址 19 self.manager = manager #經(jīng)理 20 self.myincome = 0 #本店營業(yè)額度 21 ChainStore.store_num += 1 #門店開張,總數(shù)量加1 22 ChainStore.store_list.append(self)#添加當前對象到列表 23 24 self.staff_list = [] #連鎖店包含一組員工,組合關(guān)系 25 26 def add_staff(self, staff): #添加員工 27 self.staff_list.append(staff) 28 29 def remove_staff(self, no): #刪除員工 30 for staff in self.staff_list: 31 if staff.no == no: 32 self.staff_list.remove(staff) 33 34 def print_all_staff(self): #打印所有員工信息 35 for staff in self.staff_list: 36 print(staff) 37 38 def do_business(self, income): #營業(yè) 39 print("正在營業(yè)") 40 self.myincome += income #營業(yè)額累加 41 # 將本店的營業(yè)額度累加到總營業(yè)額度 42 ChainStore.total_income += income 43 44 def __str__(self): #重寫__str__() 45 ret="編號:%s,名稱:%s,地址:%s,店長:%s,總營業(yè)額:%.2f"\ 46 %(self.store_no, self.store_name, 47 self.address,self.manager, self.myincome) 48 return ret 49 50 def __del__(self): #析構(gòu)函數(shù) 51 print("%s門店關(guān)閉" % self.store_name) 52 ChainStore.store_num -= 1 #減少一家門店 53 54 @classmethod 55 def print_total(cls): #類方法,打印類的屬性 56 print("門店數(shù)量:%d, 營業(yè)總額度:%.2f" %\ 57 (cls.store_num, cls.total_income)) 58 for store in cls.store_list: #遍歷門店列表 59 print(str(store)) 60 61 @staticmethod 62 def print_regulation(): #靜態(tài)方法,打印管理條例 63 regulation = ''' 64 --------- 連鎖店管理條例 --------- 65 第一條 考勤 66 第一款 不遲到,不早退,不曠工 67 第二款 有事向經(jīng)理請假 68 ... 69 70 第二條 服務(wù)規(guī)范 71 ... 72 ''' 73 print(regulation) 74 75 def cust_reg(self, cust): #會員注冊 76 ChainStore.cust_list.append(cust) 77 78 def print_cust_info(self): #打印會員 79 for cust in ChainStore.cust_list: 80 print(cust) 81 82 if __name__ == "__main__": 83 # 第一家分店 84 store1 = ChainStore("1","西單旗艦店","西單","Jerry") 85 store1.add_staff(Staff("0001","Jerry","店長")) 86 store1.add_staff(Staff("0002","Tom","Pizza制作師")) 87 store1.add_staff(ServiceRobot("0003","哆啦A夢","服務(wù)員")) 88 store1.print_all_staff() #打印所有員工信息 89 90 store1.do_business(20000) #營業(yè) 91 ChainStore.print_total() #調(diào)用類方法 92 print("") 93 store1.cust_reg(Customer("1","八戒","13522334455")) 94 store1.cust_reg(Customer("2","悟空","13899887766")) 95 store1.print_cust_info() #打印會員信息 96 97 # print("") 98 # # 第二家分店 99 store2 = ChainStore("2","中關(guān)村店","中關(guān)村","李小小") 100 store2.do_business(25000) #營業(yè) 101 del store2 #銷毀store2對象 102 103 print("程序退出") 104 # ChainStore.print_total() #調(diào)用類方法 105 106 # ChainStore.print_regulation() #通過類調(diào)用靜態(tài)方法 107 # store2.print_regulation() #通過對象調(diào)用靜態(tài)方法 108 chain_store.py

4. with語句
?? 1)作用:在訪問某些資源時,不管有沒有發(fā)生
????? 異常,都確保能夠執(zhí)行必須的清理操作,
????? 并釋放資源(類似于try-finally作用)
?? 2)語法
????? with 表達式1 [as 變量1][,表達式2 [as 變量2]]

???????? 語句塊
????? 例如:文件打開后自動關(guān)閉
??????????? 線程資源的釋放(系統(tǒng)編程階段學習)

? 3)實現(xiàn)原理:環(huán)境資源管理器(上下文管理器)
???? - 定義了__enter__()和__exit__()方法
?????? 對象稱為環(huán)境資源管理器
???? - 調(diào)用時機:__enter__()方法在with語句被
???????????????? 執(zhí)行時調(diào)用
???????????????? __exit__()方法with語句結(jié)束時被調(diào)用

??? - 格式:
?????? __enter__(self)?? 略
?????? __exit__(self, exc_type, exc_val, exc_tb)
???????? 參數(shù):exc_type 異常類型,沒有異常為None
????????????? exc_val 綁定異常對象,沒有異常為None
????????????? exc_tb 綁定TrackBack對象,沒有異常為None

1 aaa 2 bbb 3 ccc 4 a.txt 1 # with.py 2 # with語句示例 3 # try: 4 # #f = open("aaa.txt", "rt") 5 # # 使用with語句,不管以下的操作是否 6 # # 發(fā)生異常,都能保證文件被正確關(guān)閉 7 # with open("a.txt", "rt") as f: 8 # for line in f: 9 # print(line,end="") 10 # # with語句結(jié)束 11 # except: 12 # print("文件操作失敗") 13 14 class A: #自定義資源管理器 15 def __init__(self, name): 16 self.name = name 17 18 def __enter__(self): 19 print("__enter__()方法被執(zhí)行") 20 return self 21 22 def __exit__(self, exc_type, exc_val,exc_tb): 23 print("__exit__()方法被執(zhí)行") 24 if exc_type is None: #沒有出現(xiàn)異常 25 print("沒有出現(xiàn)異常") 26 else: # 出現(xiàn)異常 27 print("錯誤類型:", exc_type) 28 print("錯誤對象:", exc_val) 29 print("TraceBack:", exc_tb) 30 31 if __name__ == "__main__": 32 with A("test_name") as a: 33 print("with語句執(zhí)行了") 34 # 制造或不制造異常 35 a = int(input("請輸入一個數(shù)字:")) 36 37 print("程序退出") with.py

作業(yè):
編寫一個程序,模擬掃福,各種福的概率如下:
愛國福 30%
敬業(yè)福 10%
和諧福 30%
友善福 20%
富強福 10%
編寫代碼進行模擬

轉(zhuǎn)載于:https://www.cnblogs.com/shengjia/p/10387711.html

總結(jié)

以上是生活随笔為你收集整理的PYTHON1.面向对象_day04的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。