簡體   English   中英

如何在Python中繞過一個方法..?

[英]How to bypass a method in Python..?

這是場景。

我有一個類(X)有一個方法xyz

我必須定義一個擴展類(X)的類(Y),但是應該運行類Y的'xyz'而不是類X的'xyz'。

這是一個例子:

Code in first.py :

class X():
    def xyz(self):
        -----

Code in second.py:

import first
class Y(X):
    def xyz(self):
        -----

實際上,我的要求是每當調用“X.xyz()”時調用“Y.xyz()”並且我不能在'first.py'中進行修改但我可以修改'second.py'。

任何人都可以澄清一下。

你正在尋找monkeypatch。

不要創建子類,直接在X上替換xyz方法:

from first import X

original_xyz = X.xyz

def new_xyz(self):
    original = original_xyz(self)
    return original + ' new information'

X.xyz = new_xyz

也可以替換整個類,但需要盡早完成(在其他模塊導入類之前):

import first

first.X = Y

轉換是這樣的:

class X:
    def xyz(self):
        print 'X'

class Y(X):
    def __init__(self,x_instance):
        super(type(x_instance))

    def xyz(self):
        print 'Y'

def main():
    x_instance = X()
    x_instance.xyz()
    y_instance = Y(x_instance)
    y_instance.xyz()

if __name__=='__main__':
    main()

哪個會產生:

X
Y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM