Python 子類能否覆蓋全局函數(shù)?
問(wèn)題描述
比如在 a.py 中有個(gè)類 A
A 有個(gè)好幾個(gè)方法, 這些方法都調(diào)用了一個(gè)全局函數(shù)hello()(定義在類外, 但也在 a.py 里).
假設(shè)我想寫(xiě)一個(gè)子類 B, 但是希望 B 去調(diào)用一個(gè)新定義的 hello(), 這樣可能嗎?
# a.py# hello() 不在類的聲明里def hello(): print 'Hello' class A(object): # 調(diào)用全局函數(shù) hello() def greeting(self):hello()
# b.pyclass B(A): # 想要重載hello()從而使greeting 的輸出改變
不改 greeting, 但想要這樣的輸出:
b = B()b.greeting()’Hi’
問(wèn)題解答
回答1:看來(lái)要使用繼承的方式才可以。
回答2:謝邀。
抱歉,目前還沒(méi)有完全明白你的需求,所以先從理論上回答一下,如果題主能補(bǔ)充一下,我可以進(jìn)一步完善我的答案,給出能解決問(wèn)題的代碼。
在Python中,如果一個(gè)方法在邏輯上和一個(gè)類是能夠放在一起的。那么可以將該方法作為類的靜態(tài)方法,即用@staticmethod裝飾一下。
如果將hello()作為類A和類B的靜態(tài)方法,那么在各自的類中用cls.hello()就可以調(diào)用各自版本的hello了。
根據(jù)題主的描述,在類B中含有hello(),那么我想將其作為靜態(tài)方法是沒(méi)有問(wèn)題的。如果有其他模塊想要調(diào)用a.py中的hello(),可以直接使用A.hello()。
如果我對(duì)題主的需求理解有誤,還請(qǐng)指正。
相關(guān)文章:
1. javascript - sublime快鍵鍵問(wèn)題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問(wèn)?4. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?5. 實(shí)現(xiàn)bing搜索工具urlAPI提交6. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽(tīng)數(shù)據(jù)變化7. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問(wèn)8. phpstudy8.1支持win11系統(tǒng)嗎?9. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?10. css - 寫(xiě)頁(yè)面遇到個(gè)布局問(wèn)題,求大佬們幫解答,在線等,急!~

網(wǎng)公網(wǎng)安備