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