[英]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.