delstr函数python_Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...
## 多態(tài)
```python
OOP中標(biāo)準(zhǔn)解釋:多個(gè)不同類型對象,可以響應(yīng)同一個(gè)方法,并產(chǎn)生不同結(jié)果,即為多態(tài)
多態(tài)好處:只要知道基類使用方法即可,不需要關(guān)心具體哪一個(gè)類的對象實(shí)現(xiàn)的,
以不變應(yīng)萬變,提高靈活性/擴(kuò)展性
多態(tài),一般都需要一個(gè)管理多態(tài)的方法,方法的函數(shù)就是類的對象,在方法中通過點(diǎn)語法,調(diào)用每個(gè)對象的那個(gè)相同的方法.
```## 封裝:
```python
封裝,即是隱藏類中的一些不能被外界訪問的方法、屬性,封裝語法就是在名稱前加雙下劃線即可。
為什么封裝之后,外界無法訪問?
python中,是通過變形的方式實(shí)現(xiàn)封裝的,在名稱帶有雙下滑線的變量名字前添加單下劃線_類名實(shí)現(xiàn)的。意味著可以通過在封裝的屬性、方法前加_類名,但是一般不會(huì)這么做。#***變形僅在類的定義階段發(fā)生一次 后續(xù)再添加的帶有雙下劃線的任何屬性都不會(huì)變形 就是普通屬性***
@property:
通過property用于訪問私有屬性的值
@property#getter # 用于訪問私有屬性的值 也可以訪問普通屬性
defsalary(self):return self.__salary@salary.setter#用來設(shè)置私有屬性的值 也可以設(shè)置普通屬性
defsalary(self,new_salary):
self.__salary =new_salary
@salary.deleter#用來設(shè)置私有屬性的值 也可以刪除普通屬性
defsalary(self):#print("can not delete salary!")
del self.__dict__["_Teacher__salary"]#del self.__salary#再對私有屬性進(jìn)行增刪改查的時(shí)候,會(huì)自動(dòng)調(diào)用上面對于的裝飾的方法。
property的另一種使用場景 計(jì)算屬性
什么是計(jì)算屬性 一個(gè)屬性 它的值不是固定死的 而是通過計(jì)算動(dòng)態(tài)產(chǎn)生的
```## 內(nèi)置函數(shù)__str, del,
```python
類中的__str__
該方法在object中有定義 默認(rèn)行為 返回對象類型以及地址<__main__.person object at>在將對象轉(zhuǎn)為字符串時(shí)執(zhí)行
在print時(shí)也會(huì)執(zhí)行__str__,否則無法打印#***注意:返回值必須為字符串類型***
子類可以覆蓋該方法來完成 對打印內(nèi)容的自定義
例:classPerson:def __init__(self,name,age):
self.name=name
self.age=age#將對象轉(zhuǎn)換為字符串時(shí)執(zhí)行
def __str__(self):print("str run")return "my name is %s , age is %s" %(self.name,self.age)
p=Person("rose",20)
str(p)#str run
print(p)#str run my name is rose , age is 20
類中__del__: 也稱之為析構(gòu)函數(shù)(構(gòu)造反義詞,從有到無)
當(dāng)對象被刪除前會(huì)自動(dòng)調(diào)用 該方法
聲明時(shí)候會(huì)刪除對象?1.程序運(yùn)行結(jié)束 解釋器退出 將自動(dòng)刪除所有數(shù)據(jù)2.手動(dòng)調(diào)用del 時(shí)也會(huì)刪除對象#假設(shè)要求每一個(gè)person對象都要綁定一個(gè)文件
classPerson:def __init__(self,name,path,mode="rt",encoding="utf-8"):
self.name=name
self.file= open(path,mode,encoding=encoding)#讀取數(shù)據(jù)的方法
defread_data(self):returnself.file.read()def __del__(self):print("del run!")
self.file.close()
總結(jié):__del__該函數(shù)用于 在對象刪除前做一些清理操作
```## 反射(反省):
```python
面向?qū)ο笾械姆词?指的是,一個(gè)對象必須具備,發(fā)現(xiàn)自身屬性,以及修改自身屬性的能力;
一個(gè)對象在設(shè)計(jì)初期,可能考慮不夠周全后期需要?jiǎng)h除或修改已經(jīng)存在的屬性, 和增加屬性
反射就是通過字符串來操作對象屬性
涉及到的方法:
hasattr 判斷是否存在某個(gè)屬性
hasattr(對象,"字符串"):判斷是否有跟字符串同名的屬性名
getattr 獲取某個(gè)屬性的值
getattr(對象,"字符串"):獲取跟字符串同名的屬性值/方法名,這時(shí)可以用變量接受,存放的就是屬性值或者方法的地址??梢酝ㄟ^該變量執(zhí)行該方法。
setattr 新增或修改某個(gè)屬性
delattr 刪除某個(gè)屬性
例:classMY_CMD:defdir(self):
os.system("dir")defipconfig(self):
os.system("ipconfig")
cmd=MY_CMD()whileTrue:
name= input("請輸入要執(zhí)行的功能:")ifhasattr(cmd,name):
method=getattr(cmd,name)print(method)
method()else:print("sorry this method is not exists....!")
```## 動(dòng)態(tài)導(dǎo)入模塊
```python
直接寫import稱之為靜態(tài)導(dǎo)入 但這建立在一個(gè)基礎(chǔ)上:提前已經(jīng)知道有這個(gè)模塊
動(dòng)態(tài)導(dǎo)入 指的是 在需要的任何時(shí)候 通過指定字符串類型的包名稱來導(dǎo)入需要的模塊importimportlib
mk=importlib.import_module(m_name)#m_name 是一個(gè)代表模塊路徑的字符串,如:"build_house.my_decoration.Light"
mk 即導(dǎo)入成功的模塊"""該方式常用在框架中 因?yàn)榭蚣茉O(shè)計(jì)者不可能提前預(yù)知后續(xù)需要的模塊和類
```
總結(jié)
以上是生活随笔為你收集整理的delstr函数python_Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代程序设计 作业7 - 更加简单的题目
- 下一篇: python存储对象的数组_Python