国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Python 子類能否覆蓋全局函數(shù)?
曾經(jīng)蠟筆沒有小新
曾經(jīng)蠟筆沒有小新 2017-05-18 10:46:14
0
2
615

比如在 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'

曾經(jīng)蠟筆沒有小新
曾經(jīng)蠟筆沒有小新

全部回復(fù)(2)
大家講道理

看來要使用繼承的方式才可以。

漂亮男人

謝邀。

抱歉,目前還沒有完全明白你的需求,所以先從理論上回答一下,如果題主能補(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()

如果我對題主的需求理解有誤,還請指正。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板