python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...
一般類對象新增變量或方法的過程
在面向?qū)ο?#xff08;OOP)的編程方法中,如果需要給實(shí)例化的類對象新增方法或者屬性,一般都是在class類的定義中新增內(nèi)容,然后才能用類對象來調(diào)用新增的方法或變量。如在C++中:
C++示例類
如果此時開發(fā)人員需要為類對象p新增一個變量age和一個方法weigh()都是通過修改類的原始定義:
C++類新增成員
然而在python中給類對象新增變量或者方法并不需要對原始類定義進(jìn)行重新修改,隨時都可以給類對象新增成員。
pythonyu'yan
那么下面就以下圖中的代碼為例,為大家演示如何給python中的類對象動態(tài)的添加變量/屬性和方法:
python示例類
給類對象動態(tài)添加成員變量
Python 支持為已創(chuàng)建好的對象動態(tài)增加實(shí)例變量而不會改變類的原始定義!方法很簡單,只需要給類對象的新變量賦值即可,如給示例代碼中的對象p新增性別變量sex:
# 為p對象增加一個sex實(shí)例變量,直接聲明即可p.sex = "男"print(p.sex)運(yùn)行結(jié)果為:男
上述代碼為 p 對象動態(tài)新增了一個 sex實(shí)例變量,即直接對p對象的sex實(shí)例變量賦值就能新增一個實(shí)例變量。那么如何刪除這個動態(tài)變量呢?
python也支持動態(tài)刪除實(shí)例變量,使用del語句即可刪除,如刪除類對象p的name成員變量:
# 刪除p對象的name實(shí)例變量del p.name# 再次訪問p的name實(shí)例變量print(p.name)運(yùn)行結(jié)果為:lisi
上述代碼使用del動態(tài)刪除了已經(jīng)創(chuàng)建好的 p 對象的 name 實(shí)例變量,但因類中定義了類變量 name,故程序不會報錯;否則會報出 AttributeError 錯誤,并提示:'Person' object has no attribute 'name'。
給類對象動態(tài)添加方法/函數(shù)
注意:初學(xué)者在理解以下內(nèi)容之前,需清楚python類中 self 參數(shù)的含義和作用,可自行搜索查閱:Python中self的用法!
Python 同時支持為類對象動態(tài)新增方法,示例代碼中的Person類只定義了一個 height() 方法,而實(shí)際使用時,開發(fā)人員完全可以為p對象動態(tài)增加方法:
兩種新增類對象函數(shù)的方法
說明:為p對象動態(tài)增加方法時,Python 不會自動將調(diào)用者自動綁定到類方法的第一個參數(shù)self(即使將第一個參數(shù)命名為 self 也沒用)。通俗的說就是雖然代碼形式上(p.weigh())聲明了對象p的新方法,但實(shí)際上python并不知道該方法是屬于對象p的成員方法,需要用代碼p.weigh(p)來手動綁定方法weigh()為對象p的新方法。
另一種實(shí)現(xiàn)上述綁定功能的方法:使用MethodType模塊
def intro_func(self, content):print("("我是一個人")# 導(dǎo)入MethodTypefrom types import MethodType# 使用MethodType對intro_func進(jìn)行包裝,將該函數(shù)的第一個參數(shù)綁定為pp.intro = MethodType(intro_func, p)# 第一個參數(shù)已經(jīng)綁定了,無需傳入p.intro("新增了方法intro,功能由intro_func()實(shí)現(xiàn)")
上述代碼中,通過 MethodType 包裝 intr_func 函數(shù)之后,為p對象動態(tài)增加的 intro() 方法的第一個參數(shù)self就綁定了對象p,因此程序在調(diào)用intro() 方法時就自動將intro方法歸為p對象的成員方法,而無須傳入第一個參數(shù)self,功能與在定義Person類時己經(jīng)定義了 intro() 方法一樣。
完整代碼演示
完整代碼示例
總結(jié)
為類對象動態(tài)添加成員變量或成員方法是python類操作中非常人性化的設(shè)計,在python編程中作用明顯,希望本文內(nèi)容有助于讀者學(xué)習(xí)/工作!最后感謝您的閱讀!
謝謝
總結(jié)
以上是生活随笔為你收集整理的python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态折线图 python_python
- 下一篇: python生成随机数方法_Python