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