14-0912描述符與裝飾器描述和_第1頁
14-0912描述符與裝飾器描述和_第2頁
14-0912描述符與裝飾器描述和_第3頁
14-0912描述符與裝飾器描述和_第4頁
14-0912描述符與裝飾器描述和_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Python基礎(chǔ)課教室講師:式微 時間:2018年9月教學(xué)監(jiān)督熱線 教學(xué)監(jiān)督熱線 01020304必須掌握:super的用法必須掌握: _str_ _repr_ _call_ 方法了解:多繼承方法解析順序和Mixin開發(fā)模式了解:魔術(shù)方法原理和作用知識點回顧本節(jié)知識點01. _new_方法02. 定制屬性訪問03. 描述符教學(xué)監(jiān)督熱線 04. 裝飾器PART ONE_new_方法教學(xué)監(jiān)督熱線 思考01類每次實例化的時候都會創(chuàng)建一個新的對象,如果要求類只能被實例化一次該怎么做呢?_new_方法class Earth: def _new_(cls): if not hasattr(cls, ins

2、tance): cls.instance = super()._new_(cls) return cls.instance def _init_(self): = earthe = Earth()print(e, id(e)a = Earth()print(a, id(a)在上面的例子中,我們可以看到兩個實例的ID是相同的意味著這兩個其實引用的是同一個實例,是一個實例的不同名字_new_方法初始化函數(shù)之前單例模式合理利用_new_ 方法合理利用可以帶來方便,常應(yīng)用在類的單例模式利用這個 _new_ 可以很方便的實現(xiàn)類的單例模式_new_方法會在初始化函數(shù) _init_ 之前

3、執(zhí)行_new_方法總結(jié)必須掌握:_new_ 方法的運行順序了解:使用 _new_ 方法的單例模式應(yīng)用PART TWO定制屬性訪問教學(xué)監(jiān)督熱線 思 考010203如何判斷一個實例里面有某個屬性呢?怎樣刪除實例屬性呢?同樣的怎樣刪除變量呢?定制屬性訪問03 04 02 re = Rectangle(3, 4) # 矩形類實例改:setattr(b, length, 6)b._setattr_(length, 5)增:b.aaa = 1setattr(b, bbb, 2)b._setattr_(ccc, 3)刪:delattr(b, ccc)b._delattr_(bbb)del b01查:hasa

4、ttr(re, length)# 返回bool值getattr(re, length)# 返回屬性值b. _getattribute_(length) # 返回屬性值getattr(object,name,default) hasattr(object,name)setattr(object,name,value) = valuedelattr(object,name) del getattr / hasattr / setattr / delattrdef hasattr(object, name_string): try:

5、 getattr(object, name_string) return True except AttributeError: return False定制屬性訪問re = Rectangle(3, 4) # 矩形類實例當(dāng)屬性不存在時,如果定義了此方法,則調(diào)用方法01def _getattr_(self, item): print(no attribute)定制屬性訪問b.lengthb._getattribute_(length)屬性值存在屬性值不存在返回屬性值調(diào)用_getattr_未定義時報錯定制屬性訪問hasattrgetattrsetattr設(shè)置屬性得到屬性值判斷是否存在屬性,如果屬

6、性存在則進行下一步操作定制屬性訪問總結(jié)必須掌握:hasattr getattr setattr了解: _getattribute_熟悉: 屬性調(diào)用規(guī)則PART THREE描述符教學(xué)監(jiān)督熱線 思 考01如果在一個類中實例化另一個類,對這個屬性進行訪問的時候怎么做的?描述符class MyAtrribute: def _get_(self, instance, owner): print(get) def _set_(self, instance, value): print(set) def _delete_(self, instance): print(del)class MyClass: m

7、 = MyAtrribute() def _del_(self): print(instance delete)c = MyClass()c.mc.m = 1del c.m這類里面實例化另一個類,對這個實例做訪問時,需要定義 _get_ _set_ _delete_ 方法魔術(shù)方法描述符大家了解即可魔術(shù)方法的作用其實是讓開發(fā)人員能夠更加靈活的控制類的表現(xiàn)形式描述符總結(jié)了解描述符即可PART FOUR裝飾器教學(xué)監(jiān)督熱線 思 考01之前我們講了閉包,閉包中可以傳入一個函數(shù)嗎?裝飾器上面這里實現(xiàn)了給函數(shù)的結(jié)果加1的功能內(nèi)置裝飾器類裝飾器類也可以做裝飾器,但是需要定義 _call_ 方法裝飾器參考裝飾器修飾函數(shù)增加功能內(nèi)置裝飾器三個內(nèi)置裝飾器是需要掌握的,在項目中會經(jīng)常使用給函數(shù)增加功能修飾函數(shù)裝飾器總結(jié)必須掌握:裝飾器概念和用法必須掌握:三個內(nèi)置裝飾器的用法本節(jié)知識點回顧必須掌握:_new_方法的運行順序必須掌握:裝飾器的概念的用法必須掌握:三個內(nèi)置裝飾器了解:類中屬性的訪問過程作 業(yè)把上課的例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論