Python 子類能否覆蓋全局函數?
問題描述
比如在 a.py 中有個類 A
A 有個好幾個方法, 這些方法都調用了一個全局函數hello()(定義在類外, 但也在 a.py 里).
假設我想寫一個子類 B, 但是希望 B 去調用一個新定義的 hello(), 這樣可能嗎?
# a.py# hello() 不在類的聲明里def hello(): print 'Hello' class A(object): # 調用全局函數 hello() def greeting(self):hello()
# b.pyclass B(A): # 想要重載hello()從而使greeting 的輸出改變
不改 greeting, 但想要這樣的輸出:
b = B()b.greeting()’Hi’
問題解答
回答1:看來要使用繼承的方式才可以。
回答2:謝邀。
抱歉,目前還沒有完全明白你的需求,所以先從理論上回答一下,如果題主能補充一下,我可以進一步完善我的答案,給出能解決問題的代碼。
在Python中,如果一個方法在邏輯上和一個類是能夠放在一起的。那么可以將該方法作為類的靜態方法,即用@staticmethod裝飾一下。
如果將hello()作為類A和類B的靜態方法,那么在各自的類中用cls.hello()就可以調用各自版本的hello了。
根據題主的描述,在類B中含有hello(),那么我想將其作為靜態方法是沒有問題的。如果有其他模塊想要調用a.py中的hello(),可以直接使用A.hello()。
如果我對題主的需求理解有誤,還請指正。
相關文章:
1. angular.js - webpack build后的angularjs路由跳轉問題2. java - Activity中的成員變量被賦值之后,Activity被回收的時候內存才會被釋放嗎3. java - web項目中,用戶登陸信息存儲在session中好 還是cookie中好,取決于什么?4. php由5.3升級到5.6后,登錄網站,返回的是php代碼,不是登錄界面,各位大神有知道的嗎?5. 數組按鍵值封裝!6. 我寫的哪里有錯?請大神幫忙查看一下。7. tp5.0,param獲取全部參數8. 使用list和each配合,的作業,輸出一行后,如何換行9. 老師,flex-shrink: 1; 按視頻操作,不會自動縮放10. 為什么 必須在<ul> 下建立 <li> 在建<a>?
