Python には C# のような拡張メソッドがありますか? 次のようなメソッドを呼び出すことは可能ですか:
MyRandomMethod()
のような既存のタイプではint
?
myInt.MyRandomMethod()
Python には C# のような拡張メソッドがありますか? 次のようなメソッドを呼び出すことは可能ですか:
MyRandomMethod()
のような既存のタイプではint
?
myInt.MyRandomMethod()
Python コードで定義されたクラス オブジェクトに好きなメソッドを追加できます (別名モンキー パッチ):
>>> class A(object):
>>> pass
>>> def stuff(self):
>>> print self
>>> A.test = stuff
>>> A().test()
これは組み込み型では機能しません。それら__dict__
は書き込み可能ではないためです (それは ですdictproxy
)。
いいえ、Python には「実際の」拡張メソッド メカニズムはありません。
それがあなたが求めているものかどうかはわかりませんが、既存の型を拡張してから、新しいもので好きなものを呼び出すことができます:
class int(int):
def random_method(self):
return 4 # guaranteed to be random
v = int(5) # you'll have to instantiate all you variables like this
v.random_method()
class int(int):
def xkcd(self):
import antigravity
print(42)
>>>v.xkcd()
Traceback (most recent call last):
File "<pyshell#81>", line 1, in <module>
v.xkcd()
AttributeError: 'int' object has no attribute 'xkcd'
c = int(1)
>>> c.random_method()
4
>>> c.xkcd()
42
あなたの質問を明確にすることを願っています
私はここで説明されている方法で幸運に恵まれました:
http://mail.python.org/pipermail/python-dev/2008-January/076194.html
ビルトインで動作するかどうかはわかりませんが。
もう 1 つのオプションは、メタクラスをオーバーライドすることです。これにより、とりわけ、すべてのクラスに存在する必要がある関数を指定できます。
この記事はそれについて議論し始めます:
http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html