スレッドセーフなアクセスのためにint
をラップするプロキシクラスを作成したいと考えています。組み込み型とは対照的に、プロキシクラスは変更可能であるため、インプレースでインクリメントすることができます。さて、私はそのクラスを外部からの通常の整数と同じように使いたいと思います。通常、Pythonの__getattr__
はそれが非常に簡単に内部オブジェクトへの属性のアクセスを転送することができます:プロキシオブジェクトをラップする整数のように振る舞わせる方法は?
class Proxy:
def __init__(self, initial=0):
self._lock = threading.Lock()
self._value = initial
def increment(self):
with self._lock:
self._value += 1
def __getattr__(self, name):
return getattr(self._value, name)
しかし、__getattr__
does not get triggered for magic methods私は整数のように動作するプロキシの必要など__add__
、__rtruediv__
、などです。これらのメソッドを自動的に生成する方法はありますか?そうでなければ、ラップされた整数オブジェクトにそれらを転送しますか?
暗黙のルックアップは、公式ドキュメントに記載されている: '__getattr__'が動作しない理由をhttps://docs.python.org/3/reference/datamodel.html#special-lookup –
@IljaEverilä私が知っていますこれは私の質問が求めていることではありません。私はメソッドを生成したり、転送したりする方法を求めています。あなたがそれをそのように見たいなら、回避策です。 – danijar
あなたの質問に関連する:http://yauhen.yakimovich.info/blog/2011/08/12/wrapping-built-in-python-types/ – VPfB