比如在 a.py 中有個類 A
A 有個好幾個方法, 這些方法都調(diào)用了一個全局函數(shù)hello()(定義在類外, 但也在 a.py 里).
假設(shè)我想寫一個子類 B, 但是希望 B 去調(diào)用一個新定義的 hello(), 這樣可能嗎?
# a.py
# hello() 不在類的聲明里
def hello():
print "Hello"
class A(object):
# 調(diào)用全局函數(shù) hello()
def greeting(self):
hello()
# b.py
class B(A):
# 想要重載hello()從而使greeting 的輸出改變
不改 greeting, 但想要這樣的輸出:
b = B()
b.greeting()
'Hi'
謝邀。
抱歉,目前還沒有完全明白你的需求,所以先從理論上回答一下,如果題主能補(bǔ)充一下,我可以進(jìn)一步完善我的答案,給出能解決問題的代碼。
在Python中,如果一個方法在邏輯上和一個類是能夠放在一起的。那么可以將該方法作為類的靜態(tài)方法,即用@staticmethod
裝飾一下。
如果將hello()
作為類A和類B的靜態(tài)方法,那么在各自的類中用cls.hello()
就可以調(diào)用各自版本的hello
了。
根據(jù)題主的描述,在類B中含有hello()
,那么我想將其作為靜態(tài)方法是沒有問題的。如果有其他模塊想要調(diào)用a.py
中的hello()
,可以直接使用A.hello()
。
如果我對題主的需求理解有誤,還請指正。