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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python之路-day19-面向对象之约束

發(fā)布時(shí)間:2025/4/9 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之路-day19-面向对象之约束 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、上次內(nèi)容回顧

?

1、反射

  1、hasattr(對(duì)象,屬性(字符串))

  2、getattr(對(duì)象,屬性(字符串))

  3、setattr(對(duì)象,屬性,值)

  4、delattr(對(duì)象,屬性)

?

2、issubclass ,type , isinstance

  issunclass,判斷xxx對(duì)象或者類是否是xxx的子類

  type:獲取xxx對(duì)象的數(shù)據(jù)類型

  isinstance:判斷xxx對(duì)象是否是xxx類型(向上查找)

?

3、方法和

  類外面寫的函數(shù)都是函數(shù)

  在類中:

    實(shí)例方法:

      1、類名.方法()  函數(shù)

      2、對(duì)象.方法()  方法

    類方法:

      都是方法

    靜態(tài)方法

      都是函數(shù)

4、md5

  特點(diǎn):不可逆

  加鹽

  import hashlib

  obj = hashlib.md5(鹽)

  obj.update(byte類型的明文)

  result = obj.hetdidest()

?

二、類的約束
類的約束,主要是為了定義一個(gè)父類,約束下面子類必須按照規(guī)則
完成父類中的功能(父類中的功能為空白)
在python中有兩種辦法來解決這樣的問題
1、提取父類。然后再父類中定義好方法。在這個(gè)方法中什么都不用干,拋一個(gè)異常
就可以了。這樣所有的子類都必須重寫這個(gè)方法。否則,訪問的時(shí)候報(bào)錯(cuò)
2、使用元類來描述父類。在元類中給出一個(gè)抽象方法。這樣子類就不得不給出抽象方法
的具體實(shí)現(xiàn)。也可以起到約束的效果

第一套方案示例:

class Base:def login(self):raise Exception("你沒有實(shí)現(xiàn)login?法()") class Normal(Base):def login(self):pass class Member(Base):def denglu(self):pass class Admin(Base):def login(self):pass # 項(xiàng)?經(jīng)理寫的總?? def login(obj):print("準(zhǔn)備驗(yàn)證碼.......")obj.login()print("進(jìn)?主?.......") n = Normal() m = Member() a = Admin() login(n) login(m) # 報(bào)錯(cuò). login(a)

?

在執(zhí)行到login(m)那一步程序報(bào)錯(cuò),原因是該類沒有l(wèi)ogin方法,導(dǎo)致去
訪問父類的login方法,拋出異常報(bào)錯(cuò)
Exception異常,是所有異常的根。我們無法通過這個(gè)異常來判斷出程序
是因?yàn)槭裁磮?bào)的錯(cuò)。所以,最好是換一個(gè)比較專業(yè)的錯(cuò)誤信息,換成NotlmplementError
意為:沒實(shí)現(xiàn)的錯(cuò)誤 ? 第二套方案:寫抽象類和抽象方法
from abc import ABCMeta, abstractmethod # 類中包含了抽象?法. 那此時(shí)這個(gè)類就是個(gè)抽象類. 注意: 抽象類可以有普通?法 class IGame(metaclass=ABCMeta):# ?個(gè)游戲到底怎么玩?? 你能形容? 流程能?樣么? @abstractmethoddef play(self):passdef turn_off(self):print("破B游戲不玩了, 脫坑了") class DNFGame(IGame):# ?類必須實(shí)現(xiàn)?類中的抽象?法. 否則?類也是抽象類def play(self):print("dnf的玩?法") # g = IGame() # 抽象類不能創(chuàng)建對(duì)象 dg = DNFGame() dg.play()通過代碼我們能發(fā)現(xiàn). 這?的IGame對(duì)DNFGame進(jìn)?了約束. 換句話說. ?類對(duì)?類進(jìn)?了約束.接下來. 繼續(xù)解決我們?開始的問題.from abc import ABCMeta, abstractmethod class Base(metaclass=ABCMeta):@abstractmethoddef login(self):pass class Normal(Base):def login(self):pass class Member(Base):def denglu(self): # 這個(gè)就沒?了passdef login(self): # ?類對(duì)?類進(jìn)?實(shí)現(xiàn)pass class Admin(Base):def login(self):pass # 項(xiàng)?經(jīng)理寫的總?? def login(obj):print("準(zhǔn)備驗(yàn)證碼.......")obj.login()print("進(jìn)?主?.......")n = Normal() m = Member() a = Admin() login(n) login(m) login(a)

?

?

總結(jié): 約束. 其實(shí)就是?類對(duì)?類進(jìn)?約束. ?類必須要寫xxx?法. 在python中約束的
?式和?法有兩種:
1. 使?抽象類和抽象?法, 由于該?案來源是java和c#. 所以使?頻率還是很少的
2. 使??為拋出異常的?案. 并且盡量拋出的是NotImplementError. 這樣比較專
業(yè), ?且錯(cuò)誤比較明確.(推薦) ? ? 三、異常處理

上來先制造個(gè)異常:

def chu(a, b):return a/b ret = chu(10, 0) print(ret)結(jié)果: Traceback (most recent call last):File "/Users/sylar/PycharmProjects/oldboy/?向?qū)ο?day05.py", line 100, in <module>ret = chu(10, 0)File "/Users/sylar/PycharmProjects/oldboy/?向?qū)ο?day05.py", line 98, in chureturn a/b ZeroDivisionError: division by zero什么錯(cuò)誤呢. 除法中除數(shù)不能是0. 那如果真的出了這個(gè)錯(cuò). 你把這?堆信息拋給客戶么? 肯定不能. 那如何處理呢?def chu(a, b):return a/b try:ret = chu(10, 0)print(ret) except Exception as e:print("除數(shù)不能是0")結(jié)果: 除數(shù)不能是0 那try...except是什么意思呢? 嘗試著運(yùn)?xxxxx代碼. 出現(xiàn)了錯(cuò)誤. 就執(zhí)?except后?的
代碼. 在這個(gè)過程中. 當(dāng)代碼出現(xiàn)錯(cuò)誤的時(shí)候. 系統(tǒng)會(huì)產(chǎn)??個(gè)異常對(duì)象. 然后這個(gè)異常會(huì)向
外拋. 被except攔截. 并把接收到的異常對(duì)象賦值給e. 那這?的e就是異常對(duì)象. 那這?的
Exception是什么? Exception是所有異常的基類, 也就是異常的跟. 換句話說. 所有的錯(cuò)誤都
是Exception的?類對(duì)象. 我們看到的ZeroDivisionError 其實(shí)就是Exception的?類. 那這樣
寫好像有點(diǎn)?問題撒. Exception表示所有的錯(cuò)誤. 太籠統(tǒng)了. 所有的錯(cuò)誤都會(huì)被認(rèn)為是Exception.
當(dāng)程序中出現(xiàn)多種錯(cuò)誤的時(shí)候, 就不好分類了, 最好是出什么異常就?什么來處理. 這樣就更加合理了.
所以在try...execpt語句中. 還可以寫更多的except import traceback # 計(jì)算a+b def cul(a, b):if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):return a + belse:# 在這里有兩種方案. 1. 直接返回 , 2. 拋出異常# raise 拋出 Exception 錯(cuò)誤和異常,所有錯(cuò)誤的根raise Exception("我要的不是這個(gè). 你應(yīng)該我傳遞int或者float")try:print(cul(1, "胡辣湯")) # 加上異常的處理 except Exception as e:# 獲取到錯(cuò)誤信息. 我們需要訪問堆棧信息print(traceback.format_exc()) # 獲取堆棧信息print("出現(xiàn)了錯(cuò)誤")我們出現(xiàn)的錯(cuò)誤. python中沒有給出具體的記錄, 慎用. 名字一定要符合規(guī)范 JackException 一個(gè)讓人無從得知的自定義異常,切記慎用自定義異常 自定義異常 class GenderException(Exception):passclass Person:def __init__(self, name, gender):self.name = nameself.gender = gender# 洗澡 -> 男的進(jìn)男浴室def goto_nan_yushi(self):if self.gender != "":raise GenderException("性別不對(duì)") # 除了名字以外都是父類中的Exceptionelse:print("歡迎光臨.") try:p2 = Person("wusir", "")p2.goto_nan_yushi()p1 = Person("alex", "")p1.goto_nan_yushi() except GenderException as e:print("你去男澡堂子干嘛?") except Exception as e:print("其他錯(cuò)誤")

?

? 四、日志處理
import logging # filename: ?件名 # format: 數(shù)據(jù)的格式化輸出. 最終在?志?件中的樣? # 時(shí)間-名稱-級(jí)別-模塊: 錯(cuò)誤信息 # datefmt: 時(shí)間的格式 # level: 錯(cuò)誤的級(jí)別權(quán)重, 當(dāng)錯(cuò)誤的級(jí)別權(quán)重?于等于leval的時(shí)候才會(huì)寫??件 logging.basicConfig(filename='x1.log',format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S', level=30) # 當(dāng)前配置表示 0以上的分?jǐn)?shù)會(huì)被寫??件 # CRITICAL = 50 # FATAL = CRITICAL # ERROR = 40 # WARNING = 30 # WARN = WARNING # INFO = 20 # DEBUG = 10 # NOTSET = 0 logging.critical("我是critical") # 50分. 最貴的 logging.error("我是error") # 40分 logging.warning("我是warning") logging.info("我是info") logging.debug("我是debug") logging.log(1, "我什么都不是")import traceback try:print(1/0) except Exception:logging.error(traceback.format_exc()) # 用法print("出錯(cuò)了")import logging # 創(chuàng)建?個(gè)操作?志的對(duì)象logger(依賴FileHandler) # open() file_handler = logging.FileHandler('zuo.log', 'a', encoding='utf-8') file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger1 = logging.Logger('qq', level=20) logger1.addHandler(file_handler) # 把文件助手和日志對(duì)象綁定 logger1.error('我是A系統(tǒng)出錯(cuò)了') # 記錄日志# 再創(chuàng)建?個(gè)操作?志的對(duì)象logger(依賴FileHandler) file_handler2 = logging.FileHandler('you.log', 'a', encoding='utf-8') file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s")) logger2 = logging.Logger('B系統(tǒng)', level=20) logger2.addHandler(file_handler2)import traceback try:print(1/0) except Exception:logger2.critical(traceback.format_exc())print("出錯(cuò)了. 請(qǐng)聯(lián)系管理員") print("程序繼續(xù)知悉個(gè)")from types import MethodType, FunctionType class Foo:@classmethoddef func1(self):pass@staticmethoddef func2(self):passdef func3(self):passdef func4(self):passobj = Foo() lst.append(obj.func4) for item in lst:print(isinstance(item, MethodType))

?










轉(zhuǎn)載于:https://www.cnblogs.com/alvin-jie/p/9948762.html

總結(jié)

以上是生活随笔為你收集整理的python之路-day19-面向对象之约束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线观看不卡一区 | 亚洲一区二区精华 | 日韩人妻精品一区二区三区 | 闷骚老干部cao个爽 av九九九 | av黄色免费网站 | 国产一区二区三区四区精 | 欧美99视频 | 精品一区二区三区视频在线观看 | 欧美丰满熟妇bbbbbb百度 | 国产7777777| 中文字幕亚洲成人 | 日本最新中文字幕 | 午夜视频在线观看网站 | 亚洲国产视频网站 | 婷婷激情五月 | 国产麻豆免费视频 | 亚洲熟妇无码另类久久久 | 欧美αv| 国产精品一区二区免费视频 | 麻豆md0034在线观看 | 911美女片黄在线观看游戏 | 少妇性l交大片7724com | 久久欧美 | 国产夫妇交换聚会群4p | 欧美日韩字幕 | 欧美第一夜| 久久99国产综合精品免费 | av成人免费 | 国产探花精品一区二区 | 蜜桃成熟时李丽珍国语 | 毛片网站在线 | 亚洲一区亚洲二区 | 国产一区二区综合 | 我要看免费黄色片 | 日日操夜夜 | 成人黄色a级片 | 亚洲人在线视频 | 在线观看成人一区 | 尤物网站在线播放 | 玩偶姐姐在线看 | 色狠狠一区二区三区 | 色婷婷婷婷 | 成人性生活免费视频 | 极品91| 亚洲天堂久久新 | a天堂中文在线 | xxx性日本 | 香蕉视频成人在线观看 | 逼特逼在线视频 | 国产精品拍拍 | 99re久久精品国产 | youjizzcom日本 | 特级性生活片 | 波多野结衣午夜 | 五月婷激情| 欧美日韩在线视频一区 | 毛片麻豆 | 国产欧美日韩综合精品一区二区 | 久草网址 | japansexxxxhd医生 夜夜操导航 | 97插插插 | 丝袜美女av | 天天综合精品 | 51调教丨国产调教视频 | 亚洲免费大全 | 人妻偷人精品一区二区三区 | av高清免费 | 福利电影在线播放 | 国产伊人自拍 | a级黄色网址 | 中文字幕在线色 | 日本三级生活片 | 日韩精品一二三四区 | 日本裸体视频 | 亚洲一区二区三区免费在线观看 | 国产精品女人精品久久久天天 | 打开免费观看视频在线播放 | 亚洲日本影院 | 亚洲第一第二区 | 欧美一卡二卡三卡四卡 | 亚洲精品中文字幕乱码无线 | 一本大道综合伊人精品热热 | 国产黄色片在线免费观看 | 在线观看国产精品入口男同 | 欧美激情一区二区三级高清视频 | 亚洲少妇18p | 日本三级播放 | 国产精品入口麻豆 | 久热中文字幕 | 国产aⅴ无码片毛片一级一区2 | 欧美日韩在线免费观看 | 99草视频 | 国产黄视频在线观看 | 久久国产视频播放 | 四色成人网 | 亚洲国产免费视频 | 日韩精品中文在线 | 天美视频在线观看 | 催眠调教后宫乱淫校园 |