1. 程式人生 > >python外掛方式mixin和monkey-patching

python外掛方式mixin和monkey-patching

2012-03-31

#http://abloz.com #author:ablozhou #date:2012.3.31

python可以用mixin方式做外掛。limodou著名的ulipad python編輯器就採用這種外掛機制。mixin是一個類,該類的一些屬性和方法,可以傳給繼承的類。一些支援多繼承的面向物件指令碼語言,可以將某種屬性採用多繼承方式,讓一個繼承類具有mixin類的屬性和方法。據維基百科所說,最早使用mixin的是lisp的擴充套件語言flavor。支援的指令碼語言也相當多,如ruby,javascript等。參考《Mixin 掃盲班》賴勇浩blog.csdn.net/lanphaday/article/details/1656969 但有人反對採用mixin機制,因為多繼承會引起

mro(Method Resolution Order)問題。

monkey-patching 不知為何叫這名字,“猴子補丁”?估計有其文化來源。但具體意思是一種在動態語言中修改執行程式碼的方式,如Smalltalk, JavaScript, Objective-C, Ruby, Perl, Python, Groovy等語言,不必修改原始程式碼。

gevent的非同步socket,就採用猴子補丁。


from gevent import monkey

monkey.patch_all()

具體打猴子補丁方式: #module ma class A: def do_sth(self): pass

import ma class MonkeyPatchA: def do_sth(self): pass

ma.A = MonkeyPatchA

這樣將類替換掉了。 參考: http://www.yosefk.com/blog/machine-code-monkey-patching.html http://www.python.org/getit/releases/2.3/mro/ http://blog.csdn.net/lanphaday/article/details/1656969

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源